2016-02-17 20:47:43 +00:00
# -*- coding: utf-8 -*-
2016-02-23 20:26:37 +00:00
from menu import *
2016-02-27 15:52:27 +00:00
from profile import *
2016-03-01 21:17:22 +00:00
from list_items import *
2016-06-16 21:10:26 +00:00
from widgets import MultilineEdit , LineEdit
2016-05-28 10:06:13 +00:00
import plugin_support
2016-06-13 21:32:45 +00:00
from mainscreen_widgets import *
2016-06-06 18:18:32 +00:00
2016-03-05 12:44:52 +00:00
2016-02-21 14:32:38 +00:00
class MainWindow ( QtGui . QMainWindow ) :
2016-02-17 20:47:43 +00:00
2016-06-03 10:48:41 +00:00
def __init__ ( self , tox , reset , tray ) :
2016-02-17 20:47:43 +00:00
super ( MainWindow , self ) . __init__ ( )
2016-03-15 17:05:19 +00:00
self . reset = reset
2016-06-03 10:48:41 +00:00
self . tray = tray
2016-06-06 18:18:32 +00:00
self . setAcceptDrops ( True )
2016-03-15 17:05:19 +00:00
self . initUI ( tox )
2016-07-04 20:30:45 +00:00
if settings . Settings . get_instance ( ) [ ' show_welcome_screen ' ] :
self . ws = WelcomeScreen ( )
2016-02-17 20:47:43 +00:00
2016-02-21 14:32:38 +00:00
def setup_menu ( self , MainWindow ) :
self . menubar = QtGui . QMenuBar ( MainWindow )
self . menubar . setObjectName ( " menubar " )
2016-02-24 17:26:12 +00:00
self . menubar . setNativeMenuBar ( False )
self . menubar . setMinimumSize ( self . width ( ) , 25 )
self . menubar . setMaximumSize ( self . width ( ) , 25 )
self . menubar . setBaseSize ( self . width ( ) , 25 )
2016-05-28 10:06:13 +00:00
2016-02-21 14:32:38 +00:00
self . menuProfile = QtGui . QMenu ( self . menubar )
self . menuProfile . setObjectName ( " menuProfile " )
self . menuSettings = QtGui . QMenu ( self . menubar )
self . menuSettings . setObjectName ( " menuSettings " )
2016-05-28 10:06:13 +00:00
self . menuPlugins = QtGui . QMenu ( self . menubar )
self . menuPlugins . setObjectName ( " menuPlugins " )
2016-02-21 14:32:38 +00:00
self . menuAbout = QtGui . QMenu ( self . menubar )
self . menuAbout . setObjectName ( " menuAbout " )
2016-05-28 10:06:13 +00:00
2016-02-21 14:32:38 +00:00
self . actionAdd_friend = QtGui . QAction ( MainWindow )
self . actionAdd_friend . setObjectName ( " actionAdd_friend " )
self . actionProfile_settings = QtGui . QAction ( MainWindow )
self . actionProfile_settings . setObjectName ( " actionProfile_settings " )
self . actionPrivacy_settings = QtGui . QAction ( MainWindow )
self . actionPrivacy_settings . setObjectName ( " actionPrivacy_settings " )
self . actionInterface_settings = QtGui . QAction ( MainWindow )
self . actionInterface_settings . setObjectName ( " actionInterface_settings " )
self . actionNotifications = QtGui . QAction ( MainWindow )
self . actionNotifications . setObjectName ( " actionNotifications " )
self . actionNetwork = QtGui . QAction ( MainWindow )
self . actionNetwork . setObjectName ( " actionNetwork " )
self . actionAbout_program = QtGui . QAction ( MainWindow )
self . actionAbout_program . setObjectName ( " actionAbout_program " )
self . actionSettings = QtGui . QAction ( MainWindow )
self . actionSettings . setObjectName ( " actionSettings " )
2016-04-24 10:45:11 +00:00
self . audioSettings = QtGui . QAction ( MainWindow )
2016-05-28 10:06:13 +00:00
self . pluginData = QtGui . QAction ( MainWindow )
2016-07-02 12:40:06 +00:00
self . lockApp = QtGui . QAction ( MainWindow )
2016-02-21 14:32:38 +00:00
self . menuProfile . addAction ( self . actionAdd_friend )
self . menuProfile . addAction ( self . actionSettings )
2016-07-02 12:40:06 +00:00
self . menuProfile . addAction ( self . lockApp )
2016-02-21 14:32:38 +00:00
self . menuSettings . addAction ( self . actionPrivacy_settings )
self . menuSettings . addAction ( self . actionInterface_settings )
self . menuSettings . addAction ( self . actionNotifications )
self . menuSettings . addAction ( self . actionNetwork )
2016-04-24 10:45:11 +00:00
self . menuSettings . addAction ( self . audioSettings )
2016-05-28 10:06:13 +00:00
self . menuPlugins . addAction ( self . pluginData )
2016-02-21 14:32:38 +00:00
self . menuAbout . addAction ( self . actionAbout_program )
self . menubar . addAction ( self . menuProfile . menuAction ( ) )
self . menubar . addAction ( self . menuSettings . menuAction ( ) )
2016-05-28 10:06:13 +00:00
self . menubar . addAction ( self . menuPlugins . menuAction ( ) )
2016-02-21 14:32:38 +00:00
self . menubar . addAction ( self . menuAbout . menuAction ( ) )
2016-02-23 20:26:37 +00:00
self . actionAbout_program . triggered . connect ( self . about_program )
self . actionNetwork . triggered . connect ( self . network_settings )
self . actionAdd_friend . triggered . connect ( self . add_contact )
self . actionSettings . triggered . connect ( self . profile_settings )
self . actionPrivacy_settings . triggered . connect ( self . privacy_settings )
self . actionInterface_settings . triggered . connect ( self . interface_settings )
self . actionNotifications . triggered . connect ( self . notification_settings )
2016-04-24 10:45:11 +00:00
self . audioSettings . triggered . connect ( self . audio_settings )
2016-05-28 10:06:13 +00:00
self . pluginData . triggered . connect ( self . plugins_menu )
2016-07-02 12:40:06 +00:00
self . lockApp . triggered . connect ( self . lock_app )
2016-04-04 09:20:32 +00:00
QtCore . QMetaObject . connectSlotsByName ( MainWindow )
def languageChange ( self , * args , * * kwargs ) :
self . retranslateUi ( )
2016-02-23 20:26:37 +00:00
2016-06-03 10:48:41 +00:00
def event ( self , event ) :
if event . type ( ) == QtCore . QEvent . WindowActivate :
self . tray . setIcon ( QtGui . QIcon ( curr_directory ( ) + ' /images/icon.png ' ) )
return super ( MainWindow , self ) . event ( event )
2016-04-04 09:20:32 +00:00
def retranslateUi ( self ) :
2016-07-02 12:40:06 +00:00
self . lockApp . setText ( QtGui . QApplication . translate ( " MainWindow " , " Lock " , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-05-28 10:06:13 +00:00
self . menuPlugins . setTitle ( QtGui . QApplication . translate ( " MainWindow " , " Plugins " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . pluginData . setText ( QtGui . QApplication . translate ( " MainWindow " , " List of plugins " , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-02-21 14:32:38 +00:00
self . menuProfile . setTitle ( QtGui . QApplication . translate ( " MainWindow " , " Profile " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . menuSettings . setTitle ( QtGui . QApplication . translate ( " MainWindow " , " Settings " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . menuAbout . setTitle ( QtGui . QApplication . translate ( " MainWindow " , " About " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . actionAdd_friend . setText ( QtGui . QApplication . translate ( " MainWindow " , " Add contact " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . actionProfile_settings . setText ( QtGui . QApplication . translate ( " MainWindow " , " Profile " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . actionPrivacy_settings . setText ( QtGui . QApplication . translate ( " MainWindow " , " Privacy " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . actionInterface_settings . setText ( QtGui . QApplication . translate ( " MainWindow " , " Interface " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . actionNotifications . setText ( QtGui . QApplication . translate ( " MainWindow " , " Notifications " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . actionNetwork . setText ( QtGui . QApplication . translate ( " MainWindow " , " Network " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . actionAbout_program . setText ( QtGui . QApplication . translate ( " MainWindow " , " About program " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . actionSettings . setText ( QtGui . QApplication . translate ( " MainWindow " , " Settings " , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-04-24 10:45:11 +00:00
self . audioSettings . setText ( QtGui . QApplication . translate ( " MainWindow " , " Audio " , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-05-18 21:38:21 +00:00
self . contact_name . setPlaceholderText ( QtGui . QApplication . translate ( " MainWindow " , " Search " , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-05-11 16:35:54 +00:00
self . sendMessageButton . setToolTip ( QtGui . QApplication . translate ( " MainWindow " , " Send message " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . callButton . setToolTip ( QtGui . QApplication . translate ( " MainWindow " , " Start audio call with friend " , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-05-18 21:38:21 +00:00
self . online_contacts . clear ( )
self . online_contacts . addItem ( QtGui . QApplication . translate ( " MainWindow " , " All " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . online_contacts . addItem ( QtGui . QApplication . translate ( " MainWindow " , " Online " , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-05-28 19:43:51 +00:00
self . online_contacts . setCurrentIndex ( int ( Settings . get_instance ( ) [ ' show_online_friends ' ] ) )
2016-02-21 14:32:38 +00:00
2016-02-18 14:02:00 +00:00
def setup_right_bottom ( self , Form ) :
2016-05-18 21:38:21 +00:00
Form . resize ( 650 , 60 )
2016-03-05 12:44:52 +00:00
self . messageEdit = MessageArea ( Form , self )
2016-05-18 21:38:21 +00:00
self . messageEdit . setGeometry ( QtCore . QRect ( 0 , 3 , 450 , 55 ) )
2016-02-18 14:02:00 +00:00
self . messageEdit . setObjectName ( " messageEdit " )
2016-05-18 21:38:21 +00:00
font = QtGui . QFont ( )
font . setPointSize ( 10 )
self . messageEdit . setFont ( font )
2016-05-08 10:51:56 +00:00
2016-02-18 14:02:00 +00:00
self . sendMessageButton = QtGui . QPushButton ( Form )
2016-05-18 21:38:21 +00:00
self . sendMessageButton . setGeometry ( QtCore . QRect ( 565 , 3 , 60 , 55 ) )
2016-02-18 14:02:00 +00:00
self . sendMessageButton . setObjectName ( " sendMessageButton " )
2016-03-22 17:32:29 +00:00
2016-06-14 18:47:03 +00:00
self . menuButton = MenuButton ( Form , self . show_menu )
self . menuButton . setGeometry ( QtCore . QRect ( QtCore . QRect ( 455 , 3 , 55 , 55 ) ) )
2016-06-11 21:40:58 +00:00
pixmap = QtGui . QPixmap ( ' send.png ' )
2016-03-21 14:23:34 +00:00
icon = QtGui . QIcon ( pixmap )
self . sendMessageButton . setIcon ( icon )
2016-05-02 15:27:46 +00:00
self . sendMessageButton . setIconSize ( QtCore . QSize ( 45 , 60 ) )
2016-06-14 18:47:03 +00:00
pixmap = QtGui . QPixmap ( ' menu.png ' )
2016-03-21 14:23:34 +00:00
icon = QtGui . QIcon ( pixmap )
2016-06-14 18:47:03 +00:00
self . menuButton . setIcon ( icon )
self . menuButton . setIconSize ( QtCore . QSize ( 40 , 40 ) )
2016-03-22 17:32:29 +00:00
2016-05-08 10:51:56 +00:00
self . sendMessageButton . clicked . connect ( self . send_message )
2016-02-18 14:02:00 +00:00
QtCore . QMetaObject . connectSlotsByName ( Form )
2016-05-18 21:38:21 +00:00
def setup_left_center_menu ( self , Form ) :
Form . resize ( 270 , 25 )
self . search_label = QtGui . QLabel ( Form )
2016-06-15 12:38:42 +00:00
self . search_label . setGeometry ( QtCore . QRect ( 3 , 2 , 20 , 20 ) )
pixmap = QtGui . QPixmap ( )
2016-05-18 21:38:21 +00:00
pixmap . load ( curr_directory ( ) + ' /images/search.png ' )
self . search_label . setScaledContents ( False )
2016-06-15 12:38:42 +00:00
self . search_label . setPixmap ( pixmap )
2016-05-18 21:38:21 +00:00
2016-06-16 21:10:26 +00:00
self . contact_name = LineEdit ( Form )
2016-06-15 12:38:42 +00:00
self . contact_name . setGeometry ( QtCore . QRect ( 0 , 0 , 150 , 25 ) )
2016-03-02 20:55:12 +00:00
self . contact_name . setObjectName ( " contact_name " )
self . contact_name . textChanged . connect ( self . filtering )
2016-06-16 21:10:26 +00:00
2016-05-18 21:38:21 +00:00
self . online_contacts = QtGui . QComboBox ( Form )
self . online_contacts . setGeometry ( QtCore . QRect ( 150 , 0 , 120 , 25 ) )
self . online_contacts . activated [ int ] . connect ( lambda x : self . filtering ( ) )
2016-06-15 12:38:42 +00:00
self . search_label . raise_ ( )
2016-05-18 21:38:21 +00:00
2016-02-18 14:02:00 +00:00
QtCore . QMetaObject . connectSlotsByName ( Form )
2016-02-17 20:47:43 +00:00
def setup_left_top ( self , Form ) :
2016-03-11 11:37:45 +00:00
Form . setCursor ( QtCore . Qt . PointingHandCursor )
2016-06-15 12:38:42 +00:00
Form . setMinimumSize ( QtCore . QSize ( 270 , 100 ) )
Form . setMaximumSize ( QtCore . QSize ( 270 , 100 ) )
Form . setBaseSize ( QtCore . QSize ( 270 , 100 ) )
2016-03-07 18:00:00 +00:00
self . avatar_label = Form . avatar_label = QtGui . QLabel ( Form )
2016-06-15 12:38:42 +00:00
self . avatar_label . setGeometry ( QtCore . QRect ( 5 , 30 , 64 , 64 ) )
2016-03-07 18:00:00 +00:00
self . avatar_label . setScaledContents ( True )
2016-04-01 17:44:02 +00:00
self . name = Form . name = DataLabel ( Form )
2016-06-16 12:48:29 +00:00
Form . name . setGeometry ( QtCore . QRect ( 75 , 40 , 150 , 25 ) )
2016-02-17 20:47:43 +00:00
font = QtGui . QFont ( )
font . setFamily ( " Times New Roman " )
2016-03-07 18:00:00 +00:00
font . setPointSize ( 14 )
2016-02-17 20:47:43 +00:00
font . setBold ( True )
2016-02-29 15:40:49 +00:00
Form . name . setFont ( font )
Form . name . setObjectName ( " name " )
2016-04-01 17:44:02 +00:00
self . status_message = Form . status_message = DataLabel ( Form )
2016-06-16 12:48:29 +00:00
Form . status_message . setGeometry ( QtCore . QRect ( 75 , 60 , 170 , 25 ) )
2016-03-07 18:00:00 +00:00
font . setPointSize ( 12 )
2016-02-17 20:47:43 +00:00
font . setBold ( False )
2016-02-29 15:40:49 +00:00
Form . status_message . setFont ( font )
Form . status_message . setObjectName ( " status_message " )
2016-06-13 16:28:17 +00:00
self . connection_status = Form . connection_status = StatusCircle ( Form )
2016-06-17 11:53:33 +00:00
Form . connection_status . setGeometry ( QtCore . QRect ( 230 , 35 , 32 , 32 ) )
2016-03-11 11:37:45 +00:00
self . avatar_label . mouseReleaseEvent = self . profile_settings
self . status_message . mouseReleaseEvent = self . profile_settings
self . name . mouseReleaseEvent = self . profile_settings
self . connection_status . raise_ ( )
2016-02-29 15:40:49 +00:00
Form . connection_status . setObjectName ( " connection_status " )
2016-02-23 12:07:15 +00:00
2016-02-18 14:02:00 +00:00
def setup_right_top ( self , Form ) :
2016-06-15 12:38:42 +00:00
Form . resize ( 650 , 100 )
2016-03-07 18:00:00 +00:00
self . account_avatar = QtGui . QLabel ( Form )
2016-06-15 12:38:42 +00:00
self . account_avatar . setGeometry ( QtCore . QRect ( 10 , 30 , 64 , 64 ) )
2016-03-07 18:00:00 +00:00
self . account_avatar . setScaledContents ( True )
2016-04-01 17:44:02 +00:00
self . account_name = DataLabel ( Form )
2016-05-18 21:38:21 +00:00
self . account_name . setGeometry ( QtCore . QRect ( 100 , 25 , 400 , 25 ) )
2016-04-28 17:06:02 +00:00
self . account_name . setTextInteractionFlags ( QtCore . Qt . LinksAccessibleByMouse )
2016-02-18 14:02:00 +00:00
font = QtGui . QFont ( )
2016-03-07 18:00:00 +00:00
font . setFamily ( " Times New Roman " )
font . setPointSize ( 14 )
2016-02-18 14:02:00 +00:00
font . setBold ( True )
self . account_name . setFont ( font )
self . account_name . setObjectName ( " account_name " )
2016-04-01 17:44:02 +00:00
self . account_status = DataLabel ( Form )
2016-05-18 21:38:21 +00:00
self . account_status . setGeometry ( QtCore . QRect ( 100 , 45 , 400 , 25 ) )
2016-04-28 17:06:02 +00:00
self . account_status . setTextInteractionFlags ( QtCore . Qt . LinksAccessibleByMouse )
2016-03-07 18:00:00 +00:00
font . setPointSize ( 12 )
2016-02-18 14:02:00 +00:00
font . setBold ( False )
self . account_status . setFont ( font )
self . account_status . setObjectName ( " account_status " )
self . callButton = QtGui . QPushButton ( Form )
2016-03-22 18:00:42 +00:00
self . callButton . setGeometry ( QtCore . QRect ( 550 , 30 , 50 , 50 ) )
2016-02-18 14:02:00 +00:00
self . callButton . setObjectName ( " callButton " )
2016-06-07 19:43:25 +00:00
self . callButton . clicked . connect ( lambda : self . profile . call_click ( True ) )
self . videocallButton = QtGui . QPushButton ( Form )
self . videocallButton . setGeometry ( QtCore . QRect ( 550 , 30 , 50 , 50 ) )
self . videocallButton . setObjectName ( " videocallButton " )
self . videocallButton . clicked . connect ( lambda : self . profile . call_click ( True , True ) )
2016-04-24 10:45:11 +00:00
self . update_call_state ( ' call ' )
2016-04-27 18:10:53 +00:00
self . typing = QtGui . QLabel ( Form )
2016-06-15 12:38:42 +00:00
self . typing . setGeometry ( QtCore . QRect ( 500 , 50 , 50 , 30 ) )
2016-04-27 18:10:53 +00:00
pixmap = QtGui . QPixmap ( QtCore . QSize ( 50 , 30 ) )
2016-06-14 18:47:03 +00:00
pixmap . load ( curr_directory ( ) + ' /images/typing.png ' )
2016-04-27 18:10:53 +00:00
self . typing . setScaledContents ( False )
self . typing . setPixmap ( pixmap . scaled ( 50 , 30 , QtCore . Qt . KeepAspectRatio ) )
self . typing . setVisible ( False )
2016-02-18 14:02:00 +00:00
QtCore . QMetaObject . connectSlotsByName ( Form )
2016-02-17 20:47:43 +00:00
2016-03-09 18:45:38 +00:00
def setup_left_center ( self , widget ) :
2016-02-25 20:40:00 +00:00
self . friends_list = QtGui . QListWidget ( widget )
2016-03-24 18:52:27 +00:00
self . friends_list . setObjectName ( " friends_list " )
2016-03-30 17:33:42 +00:00
self . friends_list . setGeometry ( 0 , 0 , 270 , 310 )
2016-02-25 20:40:00 +00:00
self . friends_list . clicked . connect ( self . friend_click )
2016-03-10 20:04:43 +00:00
self . friends_list . setContextMenuPolicy ( QtCore . Qt . CustomContextMenu )
self . friends_list . connect ( self . friends_list , QtCore . SIGNAL ( " customContextMenuRequested(QPoint) " ) ,
self . friend_right_click )
2016-03-24 18:52:27 +00:00
self . friends_list . setVerticalScrollMode ( QtGui . QAbstractItemView . ScrollPerPixel )
2016-02-25 20:40:00 +00:00
2016-02-26 18:54:15 +00:00
def setup_right_center ( self , widget ) :
self . messages = QtGui . QListWidget ( widget )
2016-05-02 15:27:46 +00:00
self . messages . setGeometry ( 0 , 0 , 620 , 310 )
2016-03-25 13:24:38 +00:00
self . messages . setObjectName ( " messages " )
2016-06-17 10:31:48 +00:00
self . messages . setSpacing ( 1 )
2016-04-20 09:32:28 +00:00
self . messages . setVerticalScrollBarPolicy ( QtCore . Qt . ScrollBarAlwaysOn )
self . messages . setHorizontalScrollBarPolicy ( QtCore . Qt . ScrollBarAlwaysOff )
2016-05-02 15:27:46 +00:00
self . messages . setFocusPolicy ( QtCore . Qt . NoFocus )
2016-03-24 21:15:07 +00:00
def load ( pos ) :
if not pos :
self . profile . load_history ( )
self . messages . verticalScrollBar ( ) . setValue ( 1 )
self . messages . verticalScrollBar ( ) . valueChanged . connect ( load )
2016-03-24 18:52:27 +00:00
self . messages . setVerticalScrollMode ( QtGui . QAbstractItemView . ScrollPerPixel )
2016-02-26 18:54:15 +00:00
2016-03-15 17:05:19 +00:00
def initUI ( self , tox ) :
2016-03-30 17:33:42 +00:00
self . setMinimumSize ( 920 , 500 )
2016-06-17 11:53:33 +00:00
s = Settings . get_instance ( )
self . setGeometry ( s [ ' x ' ] , s [ ' y ' ] , s [ ' width ' ] , s [ ' height ' ] )
2016-02-25 20:40:00 +00:00
self . setWindowTitle ( ' Toxygen ' )
2016-05-12 17:45:01 +00:00
os . chdir ( curr_directory ( ) + ' /images/ ' )
2016-02-21 14:32:38 +00:00
main = QtGui . QWidget ( )
2016-02-17 20:47:43 +00:00
grid = QtGui . QGridLayout ( )
2016-02-18 14:02:00 +00:00
search = QtGui . QWidget ( )
2016-02-17 20:47:43 +00:00
name = QtGui . QWidget ( )
2016-02-18 14:02:00 +00:00
info = QtGui . QWidget ( )
2016-02-25 20:40:00 +00:00
main_list = QtGui . QWidget ( )
2016-06-11 21:40:58 +00:00
messages = QtGui . QWidget ( )
message_buttons = QtGui . QWidget ( )
2016-06-16 09:29:45 +00:00
self . setup_left_center_menu ( search )
self . setup_left_top ( name )
self . setup_right_center ( messages )
self . setup_right_top ( info )
self . setup_right_bottom ( message_buttons )
self . setup_left_center ( main_list )
2016-06-11 21:40:58 +00:00
if not Settings . get_instance ( ) [ ' mirror_mode ' ] :
grid . addWidget ( search , 1 , 0 )
grid . addWidget ( name , 0 , 0 )
grid . addWidget ( messages , 1 , 1 , 2 , 1 )
grid . addWidget ( info , 0 , 1 )
grid . addWidget ( message_buttons , 3 , 1 )
grid . addWidget ( main_list , 2 , 0 , 2 , 1 )
grid . setColumnMinimumWidth ( 1 , 500 )
grid . setColumnMinimumWidth ( 0 , 270 )
else :
grid . addWidget ( search , 1 , 1 )
grid . addWidget ( name , 0 , 1 )
grid . addWidget ( messages , 1 , 0 , 2 , 1 )
grid . addWidget ( info , 0 , 0 )
grid . addWidget ( message_buttons , 3 , 0 )
grid . addWidget ( main_list , 2 , 1 , 2 , 1 )
grid . setColumnMinimumWidth ( 0 , 500 )
2016-06-18 20:29:49 +00:00
grid . setColumnMinimumWidth ( 1 , 270 )
2016-06-15 12:38:42 +00:00
grid . setSpacing ( 0 )
grid . setContentsMargins ( 0 , 0 , 0 , 0 )
grid . setRowMinimumHeight ( 0 , 100 )
2016-05-18 21:38:21 +00:00
grid . setRowMinimumHeight ( 1 , 25 )
2016-06-15 12:38:42 +00:00
grid . setRowMinimumHeight ( 2 , 320 )
grid . setRowMinimumHeight ( 3 , 55 )
2016-05-02 15:27:46 +00:00
grid . setColumnStretch ( 1 , 1 )
2016-05-29 19:17:48 +00:00
grid . setRowStretch ( 2 , 1 )
2016-02-21 14:32:38 +00:00
main . setLayout ( grid )
self . setCentralWidget ( main )
2016-02-24 16:39:19 +00:00
self . setup_menu ( self )
2016-05-18 21:38:21 +00:00
self . messageEdit . setFocus ( )
2016-03-09 18:11:36 +00:00
self . user_info = name
self . friend_info = info
2016-04-04 09:20:32 +00:00
self . retranslateUi ( )
2016-05-18 21:38:21 +00:00
self . profile = Profile ( tox , self )
2016-02-17 20:47:43 +00:00
2016-03-12 20:18:13 +00:00
def closeEvent ( self , * args , * * kwargs ) :
2016-03-13 12:06:06 +00:00
self . profile . save_history ( )
2016-04-24 10:45:11 +00:00
self . profile . close ( )
2016-06-17 11:53:33 +00:00
s = Settings . get_instance ( )
s [ ' x ' ] = self . pos ( ) . x ( )
s [ ' y ' ] = self . pos ( ) . y ( )
s [ ' width ' ] = self . width ( )
s [ ' height ' ] = self . height ( )
s . save ( )
2016-04-16 08:54:29 +00:00
QtGui . QApplication . closeAllWindows ( )
2016-03-12 20:18:13 +00:00
2016-05-02 15:27:46 +00:00
def resizeEvent ( self , * args , * * kwargs ) :
2016-06-15 12:38:42 +00:00
self . messages . setGeometry ( 0 , 0 , self . width ( ) - 270 , self . height ( ) - 155 )
self . friends_list . setGeometry ( 0 , 0 , 270 , self . height ( ) - 125 )
2016-06-11 21:40:58 +00:00
2016-06-15 12:38:42 +00:00
self . videocallButton . setGeometry ( QtCore . QRect ( self . width ( ) - 330 , 40 , 50 , 50 ) )
self . callButton . setGeometry ( QtCore . QRect ( self . width ( ) - 390 , 40 , 50 , 50 ) )
self . typing . setGeometry ( QtCore . QRect ( self . width ( ) - 450 , 50 , 50 , 30 ) )
2016-05-18 21:38:21 +00:00
2016-06-15 12:38:42 +00:00
self . messageEdit . setGeometry ( QtCore . QRect ( 55 , 0 , self . width ( ) - 395 , 55 ) )
self . menuButton . setGeometry ( QtCore . QRect ( 0 , 0 , 55 , 55 ) )
self . sendMessageButton . setGeometry ( QtCore . QRect ( self . width ( ) - 340 , 0 , 70 , 55 ) )
2016-05-18 21:38:21 +00:00
2016-06-15 12:38:42 +00:00
self . account_name . setGeometry ( QtCore . QRect ( 100 , 40 , self . width ( ) - 560 , 25 ) )
self . account_status . setGeometry ( QtCore . QRect ( 100 , 60 , self . width ( ) - 560 , 25 ) )
2016-06-02 20:33:38 +00:00
self . messageEdit . setFocus ( )
2016-05-02 15:27:46 +00:00
self . profile . update ( )
2016-05-07 21:47:10 +00:00
def keyPressEvent ( self , event ) :
if event . key ( ) == QtCore . Qt . Key_Escape :
self . hide ( )
else :
super ( MainWindow , self ) . keyPressEvent ( event )
2016-05-02 15:27:46 +00:00
2016-02-23 20:26:37 +00:00
# -----------------------------------------------------------------------------------------------------------------
# Functions which called when user click in menu
# -----------------------------------------------------------------------------------------------------------------
def about_program ( self ) :
import util
msgBox = QtGui . QMessageBox ( )
2016-04-04 09:20:32 +00:00
msgBox . setWindowTitle ( QtGui . QApplication . translate ( " MainWindow " , " About " , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-05-09 20:09:07 +00:00
text = ( QtGui . QApplication . translate ( " MainWindow " , ' Toxygen is Tox client written on Python. \n Version: ' , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-05-11 18:55:36 +00:00
msgBox . setText ( text + util . program_version + ' \n GitHub: github.com/xveduk/toxygen/ ' )
2016-02-23 20:26:37 +00:00
msgBox . exec_ ( )
def network_settings ( self ) :
2016-03-15 17:05:19 +00:00
self . n_s = NetworkSettings ( self . reset )
2016-02-23 20:26:37 +00:00
self . n_s . show ( )
2016-05-28 10:06:13 +00:00
def plugins_menu ( self ) :
self . p_s = PluginsSettings ( )
self . p_s . show ( )
2016-06-06 10:29:17 +00:00
def add_contact ( self , link = ' ' ) :
self . a_c = AddContact ( link )
2016-02-23 20:26:37 +00:00
self . a_c . show ( )
2016-03-23 15:37:56 +00:00
def profile_settings ( self , * args ) :
2016-03-07 18:00:00 +00:00
self . p_s = ProfileSettings ( )
2016-02-23 20:26:37 +00:00
self . p_s . show ( )
def privacy_settings ( self ) :
self . priv_s = PrivacySettings ( )
self . priv_s . show ( )
def notification_settings ( self ) :
self . notif_s = NotificationsSettings ( )
self . notif_s . show ( )
def interface_settings ( self ) :
self . int_s = InterfaceSettings ( )
self . int_s . show ( )
2016-04-24 10:45:11 +00:00
def audio_settings ( self ) :
self . audio_s = AudioSettings ( )
self . audio_s . show ( )
2016-07-02 12:40:06 +00:00
def lock_app ( self ) :
if toxencryptsave . ToxEncryptSave . get_instance ( ) . has_password ( ) :
Settings . get_instance ( ) . locked = True
self . hide ( )
else :
msgBox = QtGui . QMessageBox ( )
msgBox . setWindowTitle (
QtGui . QApplication . translate ( " MainWindow " , " Cannot lock app " , None , QtGui . QApplication . UnicodeUTF8 ) )
msgBox . setText (
QtGui . QApplication . translate ( " MainWindow " , ' Error. Profile password is not set. ' , None ,
QtGui . QApplication . UnicodeUTF8 ) )
msgBox . exec_ ( )
2016-06-14 18:47:03 +00:00
def show_menu ( self ) :
2016-06-16 09:29:45 +00:00
if not hasattr ( self , ' menu ' ) :
2016-06-15 12:38:42 +00:00
self . menu = DropdownMenu ( self )
2016-06-14 18:47:03 +00:00
self . menu . setGeometry ( QtCore . QRect ( 0 if Settings . get_instance ( ) [ ' mirror_mode ' ] else 270 ,
2016-07-02 19:19:04 +00:00
self . height ( ) - 120 ,
180 ,
120 ) )
2016-06-14 18:47:03 +00:00
self . menu . show ( )
2016-03-13 12:06:06 +00:00
# -----------------------------------------------------------------------------------------------------------------
2016-04-24 10:45:11 +00:00
# Messages, calls and file transfers
2016-03-13 12:06:06 +00:00
# -----------------------------------------------------------------------------------------------------------------
2016-02-25 20:40:00 +00:00
def send_message ( self ) :
text = self . messageEdit . toPlainText ( )
2016-03-09 18:11:36 +00:00
self . profile . send_message ( text )
2016-02-25 20:40:00 +00:00
2016-03-16 19:59:15 +00:00
def send_file ( self ) :
2016-06-14 18:47:03 +00:00
self . menu . hide ( )
2016-06-17 10:31:48 +00:00
if self . profile . active_friend + 1 :
choose = QtGui . QApplication . translate ( " MainWindow " , ' Choose file ' , None , QtGui . QApplication . UnicodeUTF8 )
2016-07-03 21:13:41 +00:00
name = QtGui . QFileDialog . getOpenFileName ( self , choose , options = QtGui . QFileDialog . DontUseNativeDialog )
2016-06-17 10:31:48 +00:00
if name [ 0 ] :
self . profile . send_file ( name [ 0 ] )
2016-03-16 19:59:15 +00:00
2016-05-08 10:51:56 +00:00
def send_screenshot ( self , hide = False ) :
2016-06-14 18:47:03 +00:00
self . menu . hide ( )
2016-06-17 10:31:48 +00:00
if self . profile . active_friend + 1 :
self . sw = ScreenShotWindow ( self )
self . sw . show ( )
if hide :
self . hide ( )
2016-03-22 12:17:46 +00:00
2016-06-14 18:47:03 +00:00
def send_smiley ( self ) :
self . menu . hide ( )
2016-06-17 10:31:48 +00:00
if self . profile . active_friend + 1 :
2016-06-27 16:28:43 +00:00
self . smiley = SmileyWindow ( self )
2016-06-17 10:31:48 +00:00
self . smiley . setGeometry ( QtCore . QRect ( self . x ( ) if Settings . get_instance ( ) [ ' mirror_mode ' ] else 270 + self . x ( ) ,
self . y ( ) + self . height ( ) - 200 ,
self . smiley . width ( ) ,
self . smiley . height ( ) ) )
self . smiley . show ( )
2016-06-14 18:47:03 +00:00
2016-06-14 20:55:41 +00:00
def send_sticker ( self ) :
2016-06-17 10:31:48 +00:00
self . menu . hide ( )
if self . profile . active_friend + 1 :
self . sticker = StickerWindow ( self )
self . sticker . setGeometry ( QtCore . QRect ( self . x ( ) if Settings . get_instance ( ) [ ' mirror_mode ' ] else 270 + self . x ( ) ,
self . y ( ) + self . height ( ) - 200 ,
self . sticker . width ( ) ,
self . sticker . height ( ) ) )
self . sticker . show ( )
2016-06-14 20:55:41 +00:00
2016-04-24 10:45:11 +00:00
def active_call ( self ) :
self . update_call_state ( ' finish_call ' )
def incoming_call ( self ) :
self . update_call_state ( ' incoming_call ' )
def call_finished ( self ) :
self . update_call_state ( ' call ' )
def update_call_state ( self , fl ) :
2016-06-07 19:43:25 +00:00
# TODO: do smth with video call button
2016-06-11 21:40:58 +00:00
os . chdir ( curr_directory ( ) + ' /images/ ' )
2016-06-14 18:47:03 +00:00
pixmap = QtGui . QPixmap ( curr_directory ( ) + ' /images/ {} .png ' . format ( fl ) )
2016-04-24 10:45:11 +00:00
icon = QtGui . QIcon ( pixmap )
self . callButton . setIcon ( icon )
self . callButton . setIconSize ( QtCore . QSize ( 50 , 50 ) )
2016-06-14 18:47:03 +00:00
pixmap = QtGui . QPixmap ( curr_directory ( ) + ' /images/videocall.png ' )
2016-06-07 19:43:25 +00:00
icon = QtGui . QIcon ( pixmap )
self . videocallButton . setIcon ( icon )
self . videocallButton . setIconSize ( QtCore . QSize ( 35 , 35 ) )
2016-04-24 10:45:11 +00:00
2016-03-13 12:06:06 +00:00
# -----------------------------------------------------------------------------------------------------------------
# Functions which called when user open context menu in friends list
# -----------------------------------------------------------------------------------------------------------------
2016-03-10 20:04:43 +00:00
def friend_right_click ( self , pos ) :
item = self . friends_list . itemAt ( pos )
2016-03-18 16:33:54 +00:00
num = self . friends_list . indexFromItem ( item ) . row ( )
2016-05-28 10:06:13 +00:00
friend = Profile . get_instance ( ) . get_friend ( num )
2016-03-18 16:33:54 +00:00
settings = Settings . get_instance ( )
allowed = friend . tox_id in settings [ ' auto_accept_from_friends ' ]
2016-04-04 09:20:32 +00:00
auto = QtGui . QApplication . translate ( " MainWindow " , ' Disallow auto accept ' , None , QtGui . QApplication . UnicodeUTF8 ) if allowed else QtGui . QApplication . translate ( " MainWindow " , ' Allow auto accept ' , None , QtGui . QApplication . UnicodeUTF8 )
2016-03-10 20:04:43 +00:00
if item is not None :
self . listMenu = QtGui . QMenu ( )
2016-04-04 09:20:32 +00:00
set_alias_item = self . listMenu . addAction ( QtGui . QApplication . translate ( " MainWindow " , ' Set alias ' , None , QtGui . QApplication . UnicodeUTF8 ) )
clear_history_item = self . listMenu . addAction ( QtGui . QApplication . translate ( " MainWindow " , ' Clear history ' , None , QtGui . QApplication . UnicodeUTF8 ) )
copy_key_item = self . listMenu . addAction ( QtGui . QApplication . translate ( " MainWindow " , ' Copy public key ' , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-03-18 16:33:54 +00:00
auto_accept_item = self . listMenu . addAction ( auto )
2016-04-04 09:20:32 +00:00
remove_item = self . listMenu . addAction ( QtGui . QApplication . translate ( " MainWindow " , ' Remove friend ' , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-06-04 12:19:15 +00:00
notes_item = self . listMenu . addAction ( QtGui . QApplication . translate ( " MainWindow " , ' Notes ' , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-05-28 10:06:13 +00:00
submenu = plugin_support . PluginLoader . get_instance ( ) . get_menu ( self . listMenu , num )
if len ( submenu ) :
plug = self . listMenu . addMenu ( QtGui . QApplication . translate ( " MainWindow " , ' Plugins ' , None , QtGui . QApplication . UnicodeUTF8 ) )
plug . addActions ( submenu )
2016-03-18 16:33:54 +00:00
self . connect ( set_alias_item , QtCore . SIGNAL ( " triggered() " ) , lambda : self . set_alias ( num ) )
self . connect ( remove_item , QtCore . SIGNAL ( " triggered() " ) , lambda : self . remove_friend ( num ) )
self . connect ( copy_key_item , QtCore . SIGNAL ( " triggered() " ) , lambda : self . copy_friend_key ( num ) )
self . connect ( clear_history_item , QtCore . SIGNAL ( " triggered() " ) , lambda : self . clear_history ( num ) )
self . connect ( auto_accept_item , QtCore . SIGNAL ( " triggered() " ) , lambda : self . auto_accept ( num , not allowed ) )
2016-06-04 12:19:15 +00:00
self . connect ( notes_item , QtCore . SIGNAL ( " triggered() " ) , lambda : self . show_note ( friend ) )
2016-03-10 20:04:43 +00:00
parent_position = self . friends_list . mapToGlobal ( QtCore . QPoint ( 0 , 0 ) )
self . listMenu . move ( parent_position + pos )
self . listMenu . show ( )
2016-06-04 12:19:15 +00:00
def show_note ( self , friend ) :
s = Settings . get_instance ( )
note = s [ ' notes ' ] [ friend . tox_id ] if friend . tox_id in s [ ' notes ' ] else ' '
user = QtGui . QApplication . translate ( " MainWindow " , ' Notes about user ' , None , QtGui . QApplication . UnicodeUTF8 )
2016-06-21 11:58:11 +00:00
user = ' {} {} ' . format ( user , friend . name )
2016-06-04 12:19:15 +00:00
def save_note ( text ) :
2016-06-13 21:32:45 +00:00
if friend . tox_id in s [ ' notes ' ] :
del s [ ' notes ' ] [ friend . tox_id ]
if text :
s [ ' notes ' ] [ friend . tox_id ] = text
2016-06-04 12:19:15 +00:00
s . save ( )
self . note = MultilineEdit ( user , note , save_note )
self . note . show ( )
2016-03-18 16:33:54 +00:00
def set_alias ( self , num ) :
2016-03-10 20:04:43 +00:00
self . profile . set_alias ( num )
2016-03-18 16:33:54 +00:00
def remove_friend ( self , num ) :
2016-03-10 20:04:43 +00:00
self . profile . delete_friend ( num )
2016-03-18 16:33:54 +00:00
def copy_friend_key ( self , num ) :
2016-03-10 20:04:43 +00:00
tox_id = self . profile . friend_public_key ( num )
clipboard = QtGui . QApplication . clipboard ( )
clipboard . setText ( tox_id )
2016-03-18 16:33:54 +00:00
def clear_history ( self , num ) :
2016-03-12 20:18:13 +00:00
self . profile . clear_history ( num )
2016-03-10 20:04:43 +00:00
2016-03-18 16:33:54 +00:00
def auto_accept ( self , num , value ) :
settings = Settings . get_instance ( )
tox_id = self . profile . friend_public_key ( num )
if value :
settings [ ' auto_accept_from_friends ' ] . append ( tox_id )
else :
2016-05-02 16:46:42 +00:00
settings [ ' auto_accept_from_friends ' ] . remove ( tox_id )
2016-03-18 16:33:54 +00:00
settings . save ( )
2016-03-13 12:06:06 +00:00
# -----------------------------------------------------------------------------------------------------------------
# Functions which called when user click somewhere else
# -----------------------------------------------------------------------------------------------------------------
2016-02-25 20:40:00 +00:00
2016-02-28 21:33:35 +00:00
def friend_click ( self , index ) :
num = index . row ( )
2016-03-09 18:11:36 +00:00
self . profile . set_active ( num )
2016-03-02 16:05:03 +00:00
2016-03-07 18:00:00 +00:00
def mouseReleaseEvent ( self , event ) :
pos = self . connection_status . pos ( )
2016-06-13 16:28:17 +00:00
x , y = pos . x ( ) + self . user_info . pos ( ) . x ( ) , pos . y ( ) + self . user_info . pos ( ) . y ( )
if ( x < event . x ( ) < x + 32 ) and ( y < event . y ( ) < y + 32 ) :
2016-03-07 18:00:00 +00:00
self . profile . change_status ( )
else :
2016-06-13 16:28:17 +00:00
super ( MainWindow , self ) . mouseReleaseEvent ( event )
2016-03-07 18:00:00 +00:00
2016-03-02 16:05:03 +00:00
def filtering ( self ) :
2016-05-18 21:38:21 +00:00
self . profile . filtration ( self . online_contacts . currentIndex ( ) == 1 , self . contact_name . text ( ) )
2016-03-05 12:44:52 +00:00