2016-02-19 16:04:53 +01:00
|
|
|
from PySide import QtCore, QtGui
|
2016-04-03 22:51:46 +02:00
|
|
|
from settings import *
|
|
|
|
from profile import Profile
|
2016-03-18 17:33:54 +01:00
|
|
|
from util import get_style, curr_directory
|
2016-04-24 12:45:11 +02:00
|
|
|
from widgets import CenteredWidget
|
|
|
|
import pyaudio
|
2016-03-11 12:37:45 +01:00
|
|
|
|
|
|
|
|
|
|
|
class AddContact(CenteredWidget):
|
2016-02-19 17:04:01 +01:00
|
|
|
"""Add contact form"""
|
2016-02-19 16:04:53 +01:00
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
super(AddContact, self).__init__()
|
|
|
|
self.initUI()
|
|
|
|
|
|
|
|
def initUI(self):
|
|
|
|
self.setObjectName('AddContact')
|
|
|
|
self.resize(568, 306)
|
|
|
|
self.sendRequestButton = QtGui.QPushButton(self)
|
|
|
|
self.sendRequestButton.setGeometry(QtCore.QRect(50, 270, 471, 31))
|
|
|
|
self.sendRequestButton.setMinimumSize(QtCore.QSize(0, 0))
|
|
|
|
self.sendRequestButton.setBaseSize(QtCore.QSize(0, 0))
|
|
|
|
self.sendRequestButton.setObjectName("sendRequestButton")
|
2016-03-09 19:11:36 +01:00
|
|
|
self.sendRequestButton.clicked.connect(self.add_friend)
|
|
|
|
self.tox_id = QtGui.QLineEdit(self)
|
|
|
|
self.tox_id.setGeometry(QtCore.QRect(50, 40, 471, 27))
|
|
|
|
self.tox_id.setObjectName("lineEdit")
|
2016-02-19 16:04:53 +01:00
|
|
|
self.label = QtGui.QLabel(self)
|
2016-03-12 16:34:10 +01:00
|
|
|
self.label.setGeometry(QtCore.QRect(30, 10, 80, 20))
|
2016-03-09 19:11:36 +01:00
|
|
|
self.error_label = QtGui.QLabel(self)
|
|
|
|
self.error_label.setGeometry(QtCore.QRect(120, 10, 400, 20))
|
2016-02-19 16:04:53 +01:00
|
|
|
font = QtGui.QFont()
|
|
|
|
font.setPointSize(16)
|
|
|
|
font.setWeight(75)
|
|
|
|
font.setBold(True)
|
|
|
|
self.label.setFont(font)
|
2016-03-09 19:11:36 +01:00
|
|
|
font.setPointSize(12)
|
|
|
|
font.setBold(False)
|
|
|
|
font.setWeight(40)
|
|
|
|
self.error_label.setFont(font)
|
|
|
|
self.error_label.setStyleSheet("QLabel { color: red; }")
|
2016-02-19 16:04:53 +01:00
|
|
|
self.label.setObjectName("label")
|
2016-03-09 19:11:36 +01:00
|
|
|
self.message_edit = QtGui.QTextEdit(self)
|
|
|
|
self.message_edit.setGeometry(QtCore.QRect(50, 110, 471, 151))
|
|
|
|
self.message_edit.setObjectName("textEdit")
|
2016-02-19 16:04:53 +01:00
|
|
|
self.label_2 = QtGui.QLabel(self)
|
|
|
|
self.label_2.setGeometry(QtCore.QRect(60, 70, 101, 31))
|
|
|
|
self.label_2.setFont(font)
|
|
|
|
self.label_2.setObjectName("label_2")
|
|
|
|
self.retranslateUi()
|
|
|
|
QtCore.QMetaObject.connectSlotsByName(self)
|
|
|
|
|
2016-03-09 19:11:36 +01:00
|
|
|
def add_friend(self):
|
|
|
|
profile = Profile.get_instance()
|
|
|
|
send = profile.send_friend_request(self.tox_id.text(), self.message_edit.toPlainText())
|
|
|
|
if send is True:
|
|
|
|
# request was successful
|
|
|
|
self.close()
|
|
|
|
else: # print error data
|
2016-03-12 16:34:10 +01:00
|
|
|
if len(send) > 40:
|
|
|
|
send = send[:40] + '...'
|
2016-03-09 19:11:36 +01:00
|
|
|
self.error_label.setText(send)
|
|
|
|
|
2016-02-19 16:04:53 +01:00
|
|
|
def retranslateUi(self):
|
|
|
|
self.setWindowTitle(QtGui.QApplication.translate('AddContact', "Add contact", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.sendRequestButton.setText(QtGui.QApplication.translate("Form", "Send request", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.label.setText(QtGui.QApplication.translate('AddContact', "TOX ID:", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.label_2.setText(QtGui.QApplication.translate('AddContact', "Message:", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
|
2016-02-19 17:04:01 +01:00
|
|
|
|
2016-03-11 12:37:45 +01:00
|
|
|
class ProfileSettings(CenteredWidget):
|
2016-02-19 17:04:01 +01:00
|
|
|
"""Form with profile settings such as name, status, TOX ID"""
|
2016-03-07 19:00:00 +01:00
|
|
|
def __init__(self):
|
2016-02-19 17:04:01 +01:00
|
|
|
super(ProfileSettings, self).__init__()
|
|
|
|
self.initUI()
|
|
|
|
|
|
|
|
def initUI(self):
|
|
|
|
self.setObjectName("ProfileSettingsForm")
|
2016-04-04 11:20:32 +02:00
|
|
|
self.setMinimumSize(QtCore.QSize(650, 370))
|
|
|
|
self.setMaximumSize(QtCore.QSize(650, 370))
|
2016-02-19 17:04:01 +01:00
|
|
|
self.nick = QtGui.QLineEdit(self)
|
2016-04-04 11:20:32 +02:00
|
|
|
self.nick.setGeometry(QtCore.QRect(30, 60, 350, 27))
|
2016-02-19 17:04:01 +01:00
|
|
|
self.nick.setObjectName("nick")
|
2016-03-07 19:00:00 +01:00
|
|
|
profile = Profile.get_instance()
|
|
|
|
self.nick.setText(profile.name)
|
2016-02-19 17:04:01 +01:00
|
|
|
self.status = QtGui.QLineEdit(self)
|
2016-04-04 11:20:32 +02:00
|
|
|
self.status.setGeometry(QtCore.QRect(30, 130, 350, 27))
|
2016-02-19 17:04:01 +01:00
|
|
|
self.status.setObjectName("status")
|
2016-03-07 19:00:00 +01:00
|
|
|
self.status.setText(profile.status_message)
|
2016-02-19 17:04:01 +01:00
|
|
|
self.label = QtGui.QLabel(self)
|
|
|
|
self.label.setGeometry(QtCore.QRect(50, 30, 91, 21))
|
|
|
|
font = QtGui.QFont()
|
|
|
|
font.setPointSize(18)
|
|
|
|
font.setWeight(75)
|
|
|
|
font.setBold(True)
|
|
|
|
self.label.setFont(font)
|
|
|
|
self.label.setObjectName("label")
|
|
|
|
self.label_2 = QtGui.QLabel(self)
|
2016-03-22 10:50:18 +01:00
|
|
|
self.label_2.setGeometry(QtCore.QRect(40, 100, 100, 21))
|
2016-02-19 17:04:01 +01:00
|
|
|
self.label_2.setFont(font)
|
|
|
|
self.label_2.setObjectName("label_2")
|
|
|
|
self.label_3 = QtGui.QLabel(self)
|
2016-03-22 10:50:18 +01:00
|
|
|
self.label_3.setGeometry(QtCore.QRect(40, 170, 100, 21))
|
2016-02-19 17:04:01 +01:00
|
|
|
self.label_3.setFont(font)
|
|
|
|
self.label_3.setObjectName("label_3")
|
|
|
|
self.tox_id = QtGui.QLabel(self)
|
2016-02-25 09:32:40 +01:00
|
|
|
self.tox_id.setGeometry(QtCore.QRect(10, 210, self.width(), 21))
|
2016-02-29 17:39:43 +01:00
|
|
|
font.setPointSize(10)
|
2016-02-19 17:04:01 +01:00
|
|
|
self.tox_id.setFont(font)
|
|
|
|
self.tox_id.setObjectName("tox_id")
|
2016-03-07 19:00:00 +01:00
|
|
|
s = profile.tox_id
|
2016-02-25 09:32:40 +01:00
|
|
|
self.tox_id.setText(s)
|
2016-02-19 17:04:01 +01:00
|
|
|
self.copyId = QtGui.QPushButton(self)
|
2016-03-22 10:50:18 +01:00
|
|
|
self.copyId.setGeometry(QtCore.QRect(40, 250, 150, 30))
|
2016-02-19 17:04:01 +01:00
|
|
|
self.copyId.setObjectName("copyId")
|
2016-02-25 09:32:40 +01:00
|
|
|
self.copyId.clicked.connect(self.copy)
|
2016-03-12 11:09:58 +01:00
|
|
|
self.export = QtGui.QPushButton(self)
|
2016-03-22 10:50:18 +01:00
|
|
|
self.export.setGeometry(QtCore.QRect(200, 250, 150, 30))
|
2016-03-12 11:09:58 +01:00
|
|
|
self.export.setObjectName("export")
|
|
|
|
self.export.clicked.connect(self.export_profile)
|
2016-03-11 12:37:45 +01:00
|
|
|
self.new_avatar = QtGui.QPushButton(self)
|
|
|
|
self.new_avatar.setGeometry(QtCore.QRect(400, 50, 200, 50))
|
|
|
|
self.delete_avatar = QtGui.QPushButton(self)
|
2016-03-22 10:50:18 +01:00
|
|
|
self.delete_avatar.setGeometry(QtCore.QRect(400, 120, 200, 50))
|
2016-03-11 12:37:45 +01:00
|
|
|
self.delete_avatar.clicked.connect(self.reset_avatar)
|
|
|
|
self.new_avatar.clicked.connect(self.set_avatar)
|
2016-02-19 17:04:01 +01:00
|
|
|
self.retranslateUi()
|
|
|
|
QtCore.QMetaObject.connectSlotsByName(self)
|
|
|
|
|
|
|
|
def retranslateUi(self):
|
2016-03-12 11:09:58 +01:00
|
|
|
self.export.setText(QtGui.QApplication.translate("ProfileSettingsForm", "Export profile", None, QtGui.QApplication.UnicodeUTF8))
|
2016-02-19 17:04:01 +01:00
|
|
|
self.setWindowTitle(QtGui.QApplication.translate("ProfileSettingsForm", "Profile settings", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.label.setText(QtGui.QApplication.translate("ProfileSettingsForm", "Name:", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.label_2.setText(QtGui.QApplication.translate("ProfileSettingsForm", "Status:", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.label_3.setText(QtGui.QApplication.translate("ProfileSettingsForm", "TOX ID:", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.copyId.setText(QtGui.QApplication.translate("ProfileSettingsForm", "Copy TOX ID", None, QtGui.QApplication.UnicodeUTF8))
|
2016-03-11 12:37:45 +01:00
|
|
|
self.new_avatar.setText(QtGui.QApplication.translate("ProfileSettingsForm", "New avatar", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.delete_avatar.setText(QtGui.QApplication.translate("ProfileSettingsForm", "Reset avatar", None, QtGui.QApplication.UnicodeUTF8))
|
2016-02-19 17:04:01 +01:00
|
|
|
|
2016-02-25 09:32:40 +01:00
|
|
|
def copy(self):
|
|
|
|
clipboard = QtGui.QApplication.clipboard()
|
2016-03-07 19:00:00 +01:00
|
|
|
profile = Profile.get_instance()
|
|
|
|
clipboard.setText(profile.tox_id)
|
2016-02-25 09:32:40 +01:00
|
|
|
|
2016-03-11 12:37:45 +01:00
|
|
|
def reset_avatar(self):
|
|
|
|
Profile.get_instance().reset_avatar()
|
|
|
|
|
|
|
|
def set_avatar(self):
|
2016-03-16 21:12:51 +01:00
|
|
|
name = QtGui.QFileDialog.getOpenFileName(self, 'Open file', None, 'Image Files (*.png)')
|
2016-03-11 12:37:45 +01:00
|
|
|
print name
|
|
|
|
if name[0]:
|
|
|
|
with open(name[0], 'rb') as f:
|
|
|
|
data = f.read()
|
|
|
|
Profile.get_instance().set_avatar(data)
|
|
|
|
|
2016-03-12 11:09:58 +01:00
|
|
|
def export_profile(self):
|
2016-03-13 13:06:06 +01:00
|
|
|
directory = QtGui.QFileDialog.getExistingDirectory() + '/'
|
2016-03-18 17:33:54 +01:00
|
|
|
if directory != '/':
|
|
|
|
ProfileHelper.export_profile(directory)
|
|
|
|
settings = Settings.get_instance()
|
|
|
|
settings.export(directory)
|
|
|
|
profile = Profile.get_instance()
|
|
|
|
profile.export_history(directory)
|
2016-03-12 11:09:58 +01:00
|
|
|
|
2016-02-29 17:39:43 +01:00
|
|
|
def closeEvent(self, event):
|
|
|
|
profile = Profile.get_instance()
|
2016-02-29 22:23:03 +01:00
|
|
|
profile.set_name(self.nick.text().encode('utf-8'))
|
|
|
|
profile.set_status_message(self.status.text().encode('utf-8'))
|
2016-02-29 17:39:43 +01:00
|
|
|
|
2016-02-19 17:04:01 +01:00
|
|
|
|
2016-03-11 12:37:45 +01:00
|
|
|
class NetworkSettings(CenteredWidget):
|
2016-02-19 17:04:01 +01:00
|
|
|
"""Network settings form: UDP, Ipv6 and proxy"""
|
2016-03-15 18:05:19 +01:00
|
|
|
def __init__(self, reset):
|
2016-02-19 17:04:01 +01:00
|
|
|
super(NetworkSettings, self).__init__()
|
2016-03-15 18:05:19 +01:00
|
|
|
self.reset = reset
|
2016-04-26 21:56:06 +02:00
|
|
|
self.reconn = False
|
2016-02-19 17:04:01 +01:00
|
|
|
self.initUI()
|
|
|
|
|
|
|
|
def initUI(self):
|
|
|
|
self.setObjectName("NetworkSettings")
|
|
|
|
self.resize(300, 300)
|
|
|
|
self.setMinimumSize(QtCore.QSize(300, 300))
|
|
|
|
self.setMaximumSize(QtCore.QSize(300, 300))
|
|
|
|
self.setBaseSize(QtCore.QSize(300, 300))
|
|
|
|
self.ipv = QtGui.QCheckBox(self)
|
|
|
|
self.ipv.setGeometry(QtCore.QRect(20, 10, 97, 22))
|
|
|
|
self.ipv.setObjectName("ipv")
|
|
|
|
self.udp = QtGui.QCheckBox(self)
|
2016-04-26 21:56:06 +02:00
|
|
|
self.udp.setGeometry(QtCore.QRect(150, 10, 97, 22))
|
2016-02-19 17:04:01 +01:00
|
|
|
self.udp.setObjectName("udp")
|
|
|
|
self.proxy = QtGui.QCheckBox(self)
|
2016-04-26 21:56:06 +02:00
|
|
|
self.proxy.setGeometry(QtCore.QRect(20, 40, 97, 22))
|
|
|
|
self.http = QtGui.QCheckBox(self)
|
|
|
|
self.http.setGeometry(QtCore.QRect(20, 70, 97, 22))
|
2016-02-19 17:04:01 +01:00
|
|
|
self.proxy.setObjectName("proxy")
|
|
|
|
self.proxyip = QtGui.QLineEdit(self)
|
2016-04-26 21:56:06 +02:00
|
|
|
self.proxyip.setGeometry(QtCore.QRect(40, 130, 231, 27))
|
2016-02-19 17:04:01 +01:00
|
|
|
self.proxyip.setObjectName("proxyip")
|
|
|
|
self.proxyport = QtGui.QLineEdit(self)
|
2016-04-26 21:56:06 +02:00
|
|
|
self.proxyport.setGeometry(QtCore.QRect(40, 190, 231, 27))
|
2016-02-19 17:04:01 +01:00
|
|
|
self.proxyport.setObjectName("proxyport")
|
|
|
|
self.label = QtGui.QLabel(self)
|
2016-04-26 21:56:06 +02:00
|
|
|
self.label.setGeometry(QtCore.QRect(40, 100, 66, 17))
|
2016-02-19 17:04:01 +01:00
|
|
|
self.label_2 = QtGui.QLabel(self)
|
2016-04-26 21:56:06 +02:00
|
|
|
self.label_2.setGeometry(QtCore.QRect(40, 165, 66, 17))
|
2016-04-16 10:54:29 +02:00
|
|
|
self.reconnect = QtGui.QPushButton(self)
|
2016-04-26 21:56:06 +02:00
|
|
|
self.reconnect.setGeometry(QtCore.QRect(40, 230, 200, 30))
|
2016-04-16 10:54:29 +02:00
|
|
|
self.reconnect.clicked.connect(self.restart_core)
|
2016-03-13 17:14:17 +01:00
|
|
|
settings = Settings.get_instance()
|
|
|
|
self.ipv.setChecked(settings['ipv6_enabled'])
|
|
|
|
self.udp.setChecked(settings['udp_enabled'])
|
|
|
|
self.proxy.setChecked(settings['proxy_type'] != 0)
|
|
|
|
self.proxyip.setText(settings['proxy_host'])
|
|
|
|
self.proxyport.setText(unicode(settings['proxy_port']))
|
2016-02-19 17:04:01 +01:00
|
|
|
self.retranslateUi()
|
2016-04-26 21:56:06 +02:00
|
|
|
self.proxy.stateChanged.connect(lambda x: self.activate())
|
|
|
|
self.activate()
|
2016-02-19 17:04:01 +01:00
|
|
|
QtCore.QMetaObject.connectSlotsByName(self)
|
|
|
|
|
|
|
|
def retranslateUi(self):
|
|
|
|
self.setWindowTitle(QtGui.QApplication.translate("NetworkSettings", "Network settings", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.ipv.setText(QtGui.QApplication.translate("Form", "IPv6", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.udp.setText(QtGui.QApplication.translate("Form", "UDP", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.proxy.setText(QtGui.QApplication.translate("Form", "Proxy", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.label.setText(QtGui.QApplication.translate("Form", "IP:", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.label_2.setText(QtGui.QApplication.translate("Form", "Port:", None, QtGui.QApplication.UnicodeUTF8))
|
2016-04-16 10:54:29 +02:00
|
|
|
self.reconnect.setText(QtGui.QApplication.translate("NetworkSettings", "Restart TOX core", None, QtGui.QApplication.UnicodeUTF8))
|
2016-04-26 21:56:06 +02:00
|
|
|
self.http.setText(QtGui.QApplication.translate("Form", "HTTP", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
|
|
|
|
def activate(self):
|
|
|
|
bl = self.proxy.isChecked()
|
|
|
|
self.proxyip.setEnabled(bl)
|
|
|
|
self.http.setEnabled(bl)
|
|
|
|
self.proxyport.setEnabled(bl)
|
2016-02-19 17:04:01 +01:00
|
|
|
|
2016-03-13 17:14:17 +01:00
|
|
|
def closeEvent(self, *args, **kwargs):
|
|
|
|
settings = Settings.get_instance()
|
2016-03-14 20:30:51 +01:00
|
|
|
old_data = str(settings['ipv6_enabled']) + str(settings['udp_enabled']) + str(bool(settings['proxy_type']))
|
|
|
|
new_data = str(self.ipv.isChecked()) + str(self.udp.isChecked()) + str(self.proxy.isChecked())
|
|
|
|
changed = old_data != new_data
|
2016-03-16 17:06:15 +01:00
|
|
|
if self.proxy.isChecked() and (self.proxyip.text() != settings['proxy_host'] or self.proxyport.text() != unicode(settings['proxy_port'])):
|
2016-03-14 20:30:51 +01:00
|
|
|
changed = True
|
2016-04-26 21:56:06 +02:00
|
|
|
if changed or self.reconn:
|
2016-03-14 20:30:51 +01:00
|
|
|
settings['ipv6_enabled'] = self.ipv.isChecked()
|
|
|
|
settings['udp_enabled'] = self.udp.isChecked()
|
2016-04-26 21:56:06 +02:00
|
|
|
settings['proxy_type'] = 2 - int(self.http.isChecked())
|
2016-03-14 20:30:51 +01:00
|
|
|
settings['proxy_host'] = self.proxyip.text()
|
2016-03-15 18:05:19 +01:00
|
|
|
settings['proxy_port'] = int(self.proxyport.text())
|
2016-03-14 20:30:51 +01:00
|
|
|
settings.save()
|
|
|
|
# recreate tox instance
|
2016-03-15 18:05:19 +01:00
|
|
|
Profile.get_instance().reset(self.reset)
|
2016-03-13 17:14:17 +01:00
|
|
|
|
2016-04-16 10:54:29 +02:00
|
|
|
def restart_core(self):
|
2016-04-26 21:56:06 +02:00
|
|
|
self.reconn = True
|
2016-04-16 10:54:29 +02:00
|
|
|
self.close()
|
|
|
|
|
2016-02-19 17:04:01 +01:00
|
|
|
|
2016-03-11 12:37:45 +01:00
|
|
|
class PrivacySettings(CenteredWidget):
|
2016-02-20 21:50:10 +01:00
|
|
|
"""Privacy settings form: history, typing notifications"""
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
super(PrivacySettings, self).__init__()
|
|
|
|
self.initUI()
|
|
|
|
|
|
|
|
def initUI(self):
|
|
|
|
self.setObjectName("privacySettings")
|
2016-04-25 14:48:56 +02:00
|
|
|
self.resize(350, 550)
|
|
|
|
self.setMinimumSize(QtCore.QSize(350, 550))
|
|
|
|
self.setMaximumSize(QtCore.QSize(350, 550))
|
2016-02-20 21:50:10 +01:00
|
|
|
self.saveHistory = QtGui.QCheckBox(self)
|
|
|
|
self.saveHistory.setGeometry(QtCore.QRect(40, 20, 291, 22))
|
|
|
|
self.saveHistory.setObjectName("saveHistory")
|
|
|
|
self.fileautoaccept = QtGui.QCheckBox(self)
|
|
|
|
self.fileautoaccept.setGeometry(QtCore.QRect(40, 60, 271, 22))
|
|
|
|
self.fileautoaccept.setObjectName("fileautoaccept")
|
|
|
|
self.typingNotifications = QtGui.QCheckBox(self)
|
2016-04-14 10:29:59 +02:00
|
|
|
self.typingNotifications.setGeometry(QtCore.QRect(40, 100, 350, 30))
|
2016-02-20 21:50:10 +01:00
|
|
|
self.typingNotifications.setObjectName("typingNotifications")
|
2016-04-14 10:29:59 +02:00
|
|
|
self.inlines = QtGui.QCheckBox(self)
|
|
|
|
self.inlines.setGeometry(QtCore.QRect(40, 140, 350, 30))
|
|
|
|
self.inlines.setObjectName("inlines")
|
|
|
|
|
|
|
|
|
2016-03-18 17:33:54 +01:00
|
|
|
self.auto_path = QtGui.QLabel(self)
|
2016-04-14 10:29:59 +02:00
|
|
|
self.auto_path.setGeometry(QtCore.QRect(40, 190, 350, 30))
|
2016-03-18 17:33:54 +01:00
|
|
|
self.path = QtGui.QPlainTextEdit(self)
|
2016-04-25 14:48:56 +02:00
|
|
|
self.path.setGeometry(QtCore.QRect(10, 225, 330, 45))
|
2016-03-18 17:33:54 +01:00
|
|
|
self.change_path = QtGui.QPushButton(self)
|
2016-04-25 14:48:56 +02:00
|
|
|
self.change_path.setGeometry(QtCore.QRect(10, 280, 330, 30))
|
2016-03-03 20:19:09 +01:00
|
|
|
settings = Settings.get_instance()
|
2016-03-03 17:44:01 +01:00
|
|
|
self.typingNotifications.setChecked(settings['typing_notifications'])
|
|
|
|
self.fileautoaccept.setChecked(settings['allow_auto_accept'])
|
|
|
|
self.saveHistory.setChecked(settings['save_history'])
|
2016-04-14 10:29:59 +02:00
|
|
|
self.inlines.setChecked(settings['allow_inline'])
|
2016-03-18 17:33:54 +01:00
|
|
|
self.path.setPlainText(settings['auto_accept_path'] or curr_directory())
|
|
|
|
self.change_path.clicked.connect(self.new_path)
|
2016-04-25 14:48:56 +02:00
|
|
|
self.block_user_label = QtGui.QLabel(self)
|
|
|
|
self.block_user_label.setGeometry(QtCore.QRect(10, 320, 330, 30))
|
|
|
|
self.block_id = QtGui.QPlainTextEdit(self)
|
|
|
|
self.block_id.setGeometry(QtCore.QRect(10, 350, 330, 30))
|
|
|
|
self.block = QtGui.QPushButton(self)
|
|
|
|
self.block.setGeometry(QtCore.QRect(10, 390, 330, 30))
|
|
|
|
self.block.clicked.connect(lambda: Profile.get_instance().block_user(self.block_id.toPlainText()) or self.close())
|
|
|
|
self.blocked_users_label = QtGui.QLabel(self)
|
|
|
|
self.blocked_users_label.setGeometry(QtCore.QRect(10, 430, 330, 30))
|
|
|
|
self.comboBox = QtGui.QComboBox(self)
|
|
|
|
self.comboBox.setGeometry(QtCore.QRect(10, 460, 330, 30))
|
|
|
|
self.comboBox.addItems(settings['blocked'])
|
|
|
|
self.unblock = QtGui.QPushButton(self)
|
|
|
|
self.unblock.setGeometry(QtCore.QRect(10, 500, 330, 30))
|
|
|
|
self.unblock.clicked.connect(lambda: self.unblock_user())
|
|
|
|
self.retranslateUi()
|
2016-02-20 21:50:10 +01:00
|
|
|
QtCore.QMetaObject.connectSlotsByName(self)
|
|
|
|
|
|
|
|
def retranslateUi(self):
|
|
|
|
self.setWindowTitle(QtGui.QApplication.translate("privacySettings", "Privacy settings", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.saveHistory.setText(QtGui.QApplication.translate("privacySettings", "Save chat history", None, QtGui.QApplication.UnicodeUTF8))
|
2016-03-18 17:33:54 +01:00
|
|
|
self.fileautoaccept.setText(QtGui.QApplication.translate("privacySettings", "Allow file auto accept", None, QtGui.QApplication.UnicodeUTF8))
|
2016-02-20 21:50:10 +01:00
|
|
|
self.typingNotifications.setText(QtGui.QApplication.translate("privacySettings", "Send typing notifications", None, QtGui.QApplication.UnicodeUTF8))
|
2016-03-18 17:33:54 +01:00
|
|
|
self.auto_path.setText(QtGui.QApplication.translate("privacySettings", "Auto accept default path:", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.change_path.setText(QtGui.QApplication.translate("privacySettings", "Change", None, QtGui.QApplication.UnicodeUTF8))
|
2016-04-14 10:29:59 +02:00
|
|
|
self.inlines.setText(QtGui.QApplication.translate("privacySettings", "Allow inlines", None, QtGui.QApplication.UnicodeUTF8))
|
2016-04-25 14:48:56 +02:00
|
|
|
self.block_user_label.setText(QtGui.QApplication.translate("privacySettings", "Block by TOX ID:", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.blocked_users_label.setText(QtGui.QApplication.translate("privacySettings", "Blocked users:", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.unblock.setText(QtGui.QApplication.translate("privacySettings", "Unblock", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.block.setText(QtGui.QApplication.translate("privacySettings", "Block user", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
|
|
|
|
def unblock_user(self):
|
|
|
|
if not self.comboBox.count():
|
|
|
|
return
|
|
|
|
title = QtGui.QApplication.translate("privacySettings", "Add to friend list", None, QtGui.QApplication.UnicodeUTF8)
|
|
|
|
info = QtGui.QApplication.translate("privacySettings", "Do you want to add this user to friend list?", None, QtGui.QApplication.UnicodeUTF8)
|
|
|
|
reply = QtGui.QMessageBox.question(None, title, info, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
|
|
|
|
Profile.get_instance().unblock_user(self.comboBox.currentText(), reply == QtGui.QMessageBox.Yes)
|
|
|
|
self.close()
|
2016-02-20 21:50:10 +01:00
|
|
|
|
2016-03-03 17:44:01 +01:00
|
|
|
def closeEvent(self, event):
|
2016-03-03 20:19:09 +01:00
|
|
|
settings = Settings.get_instance()
|
2016-03-03 17:44:01 +01:00
|
|
|
settings['typing_notifications'] = self.typingNotifications.isChecked()
|
|
|
|
settings['allow_auto_accept'] = self.fileautoaccept.isChecked()
|
2016-03-13 17:14:17 +01:00
|
|
|
if settings['save_history'] and not self.saveHistory.isChecked(): # clear history
|
2016-04-14 10:29:59 +02:00
|
|
|
reply = QtGui.QMessageBox.question(None,
|
|
|
|
QtGui.QApplication.translate("privacySettings",
|
|
|
|
'Chat history',
|
|
|
|
None, QtGui.QApplication.UnicodeUTF8),
|
|
|
|
QtGui.QApplication.translate("privacySettings",
|
|
|
|
'History will be cleaned! Continue?',
|
|
|
|
None, QtGui.QApplication.UnicodeUTF8),
|
|
|
|
QtGui.QMessageBox.Yes,
|
|
|
|
QtGui.QMessageBox.No)
|
|
|
|
if reply == QtGui.QMessageBox.Yes:
|
|
|
|
Profile.get_instance().clear_history()
|
|
|
|
settings['save_history'] = self.saveHistory.isChecked()
|
|
|
|
else:
|
|
|
|
settings['save_history'] = self.saveHistory.isChecked()
|
2016-03-18 17:33:54 +01:00
|
|
|
settings['auto_accept_path'] = self.path.toPlainText()
|
2016-04-14 10:29:59 +02:00
|
|
|
settings['allow_inline'] = self.inlines.isChecked()
|
2016-03-03 17:44:01 +01:00
|
|
|
settings.save()
|
|
|
|
|
2016-03-18 17:33:54 +01:00
|
|
|
def new_path(self):
|
|
|
|
directory = QtGui.QFileDialog.getExistingDirectory() + '/'
|
|
|
|
if directory != '/':
|
|
|
|
self.path.setPlainText(directory)
|
|
|
|
|
2016-02-20 21:50:10 +01:00
|
|
|
|
2016-03-11 12:37:45 +01:00
|
|
|
class NotificationsSettings(CenteredWidget):
|
2016-02-20 21:50:10 +01:00
|
|
|
"""Notifications settings form"""
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
super(NotificationsSettings, self).__init__()
|
|
|
|
self.initUI()
|
|
|
|
|
|
|
|
def initUI(self):
|
|
|
|
self.setObjectName("notificationsForm")
|
2016-04-14 21:09:23 +02:00
|
|
|
self.resize(350, 200)
|
|
|
|
self.setMinimumSize(QtCore.QSize(350, 200))
|
|
|
|
self.setMaximumSize(QtCore.QSize(350, 200))
|
2016-02-20 21:50:10 +01:00
|
|
|
self.enableNotifications = QtGui.QCheckBox(self)
|
2016-04-24 22:24:48 +02:00
|
|
|
self.enableNotifications.setGeometry(QtCore.QRect(10, 20, 340, 18))
|
2016-02-25 12:22:15 +01:00
|
|
|
self.callsSound = QtGui.QCheckBox(self)
|
2016-04-24 22:24:48 +02:00
|
|
|
self.callsSound.setGeometry(QtCore.QRect(10, 120, 340, 18))
|
2016-04-14 21:09:23 +02:00
|
|
|
self.soundNotifications = QtGui.QCheckBox(self)
|
2016-04-24 22:24:48 +02:00
|
|
|
self.soundNotifications.setGeometry(QtCore.QRect(10, 70, 340, 18))
|
2016-03-03 20:19:09 +01:00
|
|
|
s = Settings.get_instance()
|
2016-02-25 12:22:15 +01:00
|
|
|
self.enableNotifications.setChecked(s['notifications'])
|
|
|
|
self.soundNotifications.setChecked(s['sound_notifications'])
|
|
|
|
self.callsSound.setChecked(s['calls_sound'])
|
2016-02-20 21:50:10 +01:00
|
|
|
self.retranslateUi()
|
|
|
|
QtCore.QMetaObject.connectSlotsByName(self)
|
|
|
|
|
|
|
|
def retranslateUi(self):
|
|
|
|
self.setWindowTitle(QtGui.QApplication.translate("notificationsForm", "Notification settings", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.enableNotifications.setText(QtGui.QApplication.translate("notificationsForm", "Enable notifications", None, QtGui.QApplication.UnicodeUTF8))
|
2016-03-11 17:46:30 +01:00
|
|
|
self.callsSound.setText(QtGui.QApplication.translate("notificationsForm", "Enable call\'s sound", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.soundNotifications.setText(QtGui.QApplication.translate("notificationsForm", "Enable sound notifications", None, QtGui.QApplication.UnicodeUTF8))
|
2016-02-25 12:22:15 +01:00
|
|
|
|
|
|
|
def closeEvent(self, *args, **kwargs):
|
2016-03-03 20:19:09 +01:00
|
|
|
settings = Settings.get_instance()
|
2016-02-25 12:22:15 +01:00
|
|
|
settings['notifications'] = self.enableNotifications.isChecked()
|
|
|
|
settings['sound_notifications'] = self.soundNotifications.isChecked()
|
|
|
|
settings['calls_sound'] = self.callsSound.isChecked()
|
|
|
|
settings.save()
|
2016-02-20 21:50:10 +01:00
|
|
|
|
|
|
|
|
2016-03-11 12:37:45 +01:00
|
|
|
class InterfaceSettings(CenteredWidget):
|
2016-02-20 21:50:10 +01:00
|
|
|
"""Interface settings form"""
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
super(InterfaceSettings, self).__init__()
|
|
|
|
self.initUI()
|
|
|
|
|
|
|
|
def initUI(self):
|
|
|
|
self.setObjectName("interfaceForm")
|
|
|
|
self.resize(300, 300)
|
|
|
|
self.setMinimumSize(QtCore.QSize(300, 300))
|
|
|
|
self.setMaximumSize(QtCore.QSize(300, 300))
|
|
|
|
self.setBaseSize(QtCore.QSize(300, 300))
|
|
|
|
self.label = QtGui.QLabel(self)
|
|
|
|
self.label.setGeometry(QtCore.QRect(30, 20, 91, 21))
|
|
|
|
font = QtGui.QFont()
|
|
|
|
font.setPointSize(16)
|
|
|
|
font.setWeight(75)
|
|
|
|
font.setBold(True)
|
|
|
|
self.label.setFont(font)
|
|
|
|
self.label.setObjectName("label")
|
|
|
|
self.themeSelect = QtGui.QComboBox(self)
|
2016-04-04 13:00:50 +02:00
|
|
|
self.themeSelect.setGeometry(QtCore.QRect(30, 60, 160, 30))
|
2016-02-20 21:50:10 +01:00
|
|
|
self.themeSelect.setObjectName("themeSelect")
|
2016-03-03 17:44:01 +01:00
|
|
|
list_of_themes = ['default', 'windows', 'gtk', 'cde', 'plastique', 'motif']
|
|
|
|
self.themeSelect.addItems(list_of_themes)
|
2016-04-04 11:20:32 +02:00
|
|
|
settings = Settings.get_instance()
|
|
|
|
theme = settings['theme']
|
2016-03-03 17:44:01 +01:00
|
|
|
index = list_of_themes.index(theme)
|
|
|
|
self.themeSelect.setCurrentIndex(index)
|
2016-04-04 11:20:32 +02:00
|
|
|
self.lang_choose = QtGui.QComboBox(self)
|
2016-04-04 13:00:50 +02:00
|
|
|
self.lang_choose.setGeometry(QtCore.QRect(30, 150, 160, 30))
|
2016-04-04 11:20:32 +02:00
|
|
|
self.lang_choose.setObjectName("comboBox")
|
|
|
|
supported = Settings.supported_languages()
|
|
|
|
for elem in supported:
|
|
|
|
self.lang_choose.addItem(elem[0])
|
|
|
|
lang = settings['language']
|
|
|
|
index = map(lambda x: x[0], supported).index(lang)
|
|
|
|
self.lang_choose.setCurrentIndex(index)
|
|
|
|
self.lang = QtGui.QLabel(self)
|
|
|
|
self.lang.setGeometry(QtCore.QRect(30, 110, 121, 31))
|
|
|
|
self.lang.setFont(font)
|
2016-02-20 21:50:10 +01:00
|
|
|
self.retranslateUi()
|
|
|
|
QtCore.QMetaObject.connectSlotsByName(self)
|
|
|
|
|
|
|
|
def retranslateUi(self):
|
|
|
|
self.setWindowTitle(QtGui.QApplication.translate("interfaceForm", "Interface settings", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.label.setText(QtGui.QApplication.translate("interfaceForm", "Theme:", None, QtGui.QApplication.UnicodeUTF8))
|
2016-04-04 11:20:32 +02:00
|
|
|
self.lang.setText(QtGui.QApplication.translate("interfaceForm", "Language:", None, QtGui.QApplication.UnicodeUTF8))
|
2016-03-03 17:44:01 +01:00
|
|
|
|
|
|
|
def closeEvent(self, event):
|
2016-03-03 20:19:09 +01:00
|
|
|
settings = Settings.get_instance()
|
2016-03-03 17:44:01 +01:00
|
|
|
style = str(self.themeSelect.currentText())
|
|
|
|
settings['theme'] = style
|
|
|
|
QtGui.QApplication.setStyle(get_style(style))
|
2016-04-04 11:20:32 +02:00
|
|
|
language = self.lang_choose.currentText()
|
|
|
|
if settings['language'] != language:
|
|
|
|
settings['language'] = language
|
|
|
|
index = self.lang_choose.currentIndex()
|
|
|
|
path = Settings.supported_languages()[index][1]
|
|
|
|
app = QtGui.QApplication.instance()
|
|
|
|
app.removeTranslator(app.translator)
|
|
|
|
app.translator.load(curr_directory() + '/translations/' + path)
|
|
|
|
app.installTranslator(app.translator)
|
|
|
|
settings.save()
|
|
|
|
|
2016-04-24 12:45:11 +02:00
|
|
|
|
|
|
|
class AudioSettings(CenteredWidget):
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
super(AudioSettings, self).__init__()
|
|
|
|
self.initUI()
|
|
|
|
self.retranslateUi()
|
|
|
|
|
|
|
|
def initUI(self):
|
|
|
|
self.setObjectName("audioSettingsForm")
|
|
|
|
self.resize(400, 150)
|
|
|
|
self.setMinimumSize(QtCore.QSize(400, 150))
|
|
|
|
self.setMaximumSize(QtCore.QSize(400, 150))
|
|
|
|
self.in_label = QtGui.QLabel(self)
|
|
|
|
self.in_label.setGeometry(QtCore.QRect(25, 5, 350, 20))
|
|
|
|
self.out_label = QtGui.QLabel(self)
|
|
|
|
self.out_label.setGeometry(QtCore.QRect(25, 65, 350, 20))
|
|
|
|
font = QtGui.QFont()
|
|
|
|
font.setPointSize(16)
|
|
|
|
font.setBold(True)
|
|
|
|
self.in_label.setFont(font)
|
|
|
|
self.out_label.setFont(font)
|
|
|
|
self.input = QtGui.QComboBox(self)
|
|
|
|
self.input.setGeometry(QtCore.QRect(25, 30, 350, 30))
|
|
|
|
self.output = QtGui.QComboBox(self)
|
|
|
|
self.output.setGeometry(QtCore.QRect(25, 90, 350, 30))
|
|
|
|
p = pyaudio.PyAudio()
|
|
|
|
settings = Settings.get_instance()
|
|
|
|
self.in_indexes, self.out_indexes = [], []
|
|
|
|
for i in xrange(p.get_device_count()):
|
|
|
|
device = p.get_device_info_by_index(i)
|
|
|
|
if device["maxInputChannels"]:
|
|
|
|
self.input.addItem(unicode(device["name"]))
|
|
|
|
self.in_indexes.append(i)
|
|
|
|
if device["maxOutputChannels"]:
|
|
|
|
self.output.addItem(unicode(device["name"]))
|
|
|
|
self.out_indexes.append(i)
|
|
|
|
self.input.setCurrentIndex(self.in_indexes.index(settings.audio['input']))
|
|
|
|
self.output.setCurrentIndex(self.out_indexes.index(settings.audio['output']))
|
|
|
|
QtCore.QMetaObject.connectSlotsByName(self)
|
|
|
|
|
|
|
|
def retranslateUi(self):
|
|
|
|
self.setWindowTitle(QtGui.QApplication.translate("audioSettingsForm", "Audio settings", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.in_label.setText(QtGui.QApplication.translate("audioSettingsForm", "Input device:", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
self.out_label.setText(QtGui.QApplication.translate("audioSettingsForm", "Output device:", None, QtGui.QApplication.UnicodeUTF8))
|
|
|
|
|
|
|
|
def closeEvent(self, event):
|
|
|
|
settings = Settings.get_instance()
|
|
|
|
settings.audio['input'] = self.in_indexes[self.input.currentIndex()]
|
|
|
|
settings.audio['output'] = self.out_indexes[self.output.currentIndex()]
|
|
|
|
settings.save()
|