2016-02-23 20:26:37 +00:00
from menu import *
2016-07-06 13:25:04 +00:00
from profile import *
2016-03-01 21:17:22 +00:00
from list_items import *
2016-10-30 15:13:12 +00:00
from widgets import MultilineEdit , LineEdit , ComboBox
2016-05-28 10:06:13 +00:00
import plugin_support
2016-06-13 21:32:45 +00:00
from mainscreen_widgets import *
2016-08-05 12:58:25 +00:00
import settings
2016-11-20 11:12:27 +00:00
import platform
2017-02-11 17:07:28 +00:00
import toxes
2016-06-06 18:18:32 +00:00
2016-03-05 12:44:52 +00:00
2016-07-19 20:19:42 +00:00
class MainWindow ( QtGui . QMainWindow , Singleton ) :
2016-02-17 20:47:43 +00:00
2016-06-03 10:48:41 +00:00
def __init__ ( self , tox , reset , tray ) :
2016-07-19 20:19:42 +00:00
super ( ) . __init__ ( )
Singleton . __init__ ( self )
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-10-01 20:06:15 +00:00
self . _saved = False
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-11-05 10:03:47 +00:00
def setup_menu ( self , Form ) :
box = QtGui . QHBoxLayout ( )
box . setContentsMargins ( 0 , 0 , 0 , 0 )
box . setAlignment ( QtCore . Qt . AlignLeft )
self . profile_button = MainMenuButton ( Form )
box . addWidget ( self . profile_button )
self . settings_button = MainMenuButton ( Form )
box . addWidget ( self . settings_button )
self . plugins_button = MainMenuButton ( Form )
box . addWidget ( self . plugins_button )
self . about_button = MainMenuButton ( Form )
box . addWidget ( self . about_button )
box . setSpacing ( 0 )
self . menuProfile = QtGui . QMenu ( )
2016-02-21 14:32:38 +00:00
self . menuProfile . setObjectName ( " menuProfile " )
2016-11-05 10:03:47 +00:00
self . menuSettings = QtGui . QMenu ( )
2016-02-21 14:32:38 +00:00
self . menuSettings . setObjectName ( " menuSettings " )
2016-11-05 10:03:47 +00:00
self . menuPlugins = QtGui . QMenu ( )
2016-05-28 10:06:13 +00:00
self . menuPlugins . setObjectName ( " menuPlugins " )
2016-11-05 10:03:47 +00:00
self . menuAbout = QtGui . QMenu ( )
2016-02-21 14:32:38 +00:00
self . menuAbout . setObjectName ( " menuAbout " )
2016-05-28 10:06:13 +00:00
2016-11-05 10:03:47 +00:00
self . actionAdd_friend = QtGui . QAction ( Form )
2016-02-21 14:32:38 +00:00
self . actionAdd_friend . setObjectName ( " actionAdd_friend " )
2016-11-05 10:03:47 +00:00
self . actionprofilesettings = QtGui . QAction ( Form )
2016-07-06 13:25:04 +00:00
self . actionprofilesettings . setObjectName ( " actionprofilesettings " )
2016-11-05 10:03:47 +00:00
self . actionPrivacy_settings = QtGui . QAction ( Form )
2016-02-21 14:32:38 +00:00
self . actionPrivacy_settings . setObjectName ( " actionPrivacy_settings " )
2016-11-05 10:03:47 +00:00
self . actionInterface_settings = QtGui . QAction ( Form )
2016-02-21 14:32:38 +00:00
self . actionInterface_settings . setObjectName ( " actionInterface_settings " )
2016-11-05 10:03:47 +00:00
self . actionNotifications = QtGui . QAction ( Form )
2016-02-21 14:32:38 +00:00
self . actionNotifications . setObjectName ( " actionNotifications " )
2016-11-05 10:03:47 +00:00
self . actionNetwork = QtGui . QAction ( Form )
2016-02-21 14:32:38 +00:00
self . actionNetwork . setObjectName ( " actionNetwork " )
2016-11-05 10:03:47 +00:00
self . actionAbout_program = QtGui . QAction ( Form )
2016-02-21 14:32:38 +00:00
self . actionAbout_program . setObjectName ( " actionAbout_program " )
2016-11-05 10:03:47 +00:00
self . updateSettings = QtGui . QAction ( Form )
self . actionSettings = QtGui . QAction ( Form )
2016-02-21 14:32:38 +00:00
self . actionSettings . setObjectName ( " actionSettings " )
2016-11-05 10:03:47 +00:00
self . audioSettings = QtGui . QAction ( Form )
self . pluginData = QtGui . QAction ( Form )
self . importPlugin = QtGui . QAction ( Form )
2017-03-15 20:17:38 +00:00
self . reloadPlugins = QtGui . QAction ( Form )
2016-11-05 10:03:47 +00:00
self . lockApp = QtGui . QAction ( Form )
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-09-30 20:48:30 +00:00
self . menuSettings . addAction ( self . updateSettings )
2016-05-28 10:06:13 +00:00
self . menuPlugins . addAction ( self . pluginData )
2016-07-07 10:54:02 +00:00
self . menuPlugins . addAction ( self . importPlugin )
2017-03-15 20:17:38 +00:00
self . menuPlugins . addAction ( self . reloadPlugins )
2016-02-21 14:32:38 +00:00
self . menuAbout . addAction ( self . actionAbout_program )
2016-11-05 10:03:47 +00:00
self . profile_button . setMenu ( self . menuProfile )
self . settings_button . setMenu ( self . menuSettings )
self . plugins_button . setMenu ( self . menuPlugins )
self . about_button . setMenu ( self . menuAbout )
2016-02-21 14:32:38 +00:00
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 )
2016-07-28 20:00:04 +00:00
self . actionSettings . triggered . connect ( self . profile_settings )
2016-02-23 20:26:37 +00:00
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-09-30 20:48:30 +00:00
self . updateSettings . triggered . connect ( self . update_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-07-07 10:54:02 +00:00
self . importPlugin . triggered . connect ( self . import_plugin )
2017-03-15 20:17:38 +00:00
self . reloadPlugins . triggered . connect ( self . reload_plugins )
2016-11-05 10:03:47 +00:00
Form . setLayout ( box )
QtCore . QMetaObject . connectSlotsByName ( Form )
2016-04-04 09:20:32 +00:00
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 ' ) )
2016-08-01 12:26:11 +00:00
self . messages . repaint ( )
2016-06-03 10:48:41 +00:00
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-11-05 10:03:47 +00:00
self . plugins_button . setText ( QtGui . QApplication . translate ( " MainWindow " , " Plugins " , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-05-28 10:06:13 +00:00
self . pluginData . setText ( QtGui . QApplication . translate ( " MainWindow " , " List of plugins " , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-11-05 10:03:47 +00:00
self . profile_button . setText ( QtGui . QApplication . translate ( " MainWindow " , " Profile " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . settings_button . setText ( QtGui . QApplication . translate ( " MainWindow " , " Settings " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . about_button . setText ( QtGui . QApplication . translate ( " MainWindow " , " About " , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-02-21 14:32:38 +00:00
self . actionAdd_friend . setText ( QtGui . QApplication . translate ( " MainWindow " , " Add contact " , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-07-06 13:25:04 +00:00
self . actionprofilesettings . setText ( QtGui . QApplication . translate ( " MainWindow " , " Profile " , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-02-21 14:32:38 +00:00
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-09-30 20:48:30 +00:00
self . updateSettings . setText ( QtGui . QApplication . translate ( " MainWindow " , " Updates " , 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-10-30 15:13:12 +00:00
self . online_contacts . addItem ( QtGui . QApplication . translate ( " MainWindow " , " Online first " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . online_contacts . addItem ( QtGui . QApplication . translate ( " MainWindow " , " Name " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . online_contacts . addItem ( QtGui . QApplication . translate ( " MainWindow " , " Online and by name " , None , QtGui . QApplication . UnicodeUTF8 ) )
self . online_contacts . addItem ( QtGui . QApplication . translate ( " MainWindow " , " Online first and by name " , None , QtGui . QApplication . UnicodeUTF8 ) )
ind = Settings . get_instance ( ) [ ' sorting ' ]
d = { 0 : 0 , 1 : 1 , 2 : 2 , 3 : 4 , 1 | 4 : 4 , 2 | 4 : 5 }
self . online_contacts . setCurrentIndex ( d [ ind ] )
2016-07-07 10:54:02 +00:00
self . importPlugin . setText ( QtGui . QApplication . translate ( " MainWindow " , " Import plugin " , None , QtGui . QApplication . UnicodeUTF8 ) )
2017-03-15 20:17:38 +00:00
self . reloadPlugins . setText ( QtGui . QApplication . translate ( " MainWindow " , " Reload plugins " , None , QtGui . QApplication . UnicodeUTF8 ) )
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 ( )
2016-08-08 11:07:18 +00:00
font . setPointSize ( 11 )
2016-08-05 12:58:25 +00:00
font . setFamily ( settings . Settings . get_instance ( ) [ ' font ' ] )
2016-05-18 21:38:21 +00:00
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-10-30 15:13:12 +00:00
self . online_contacts = ComboBox ( Form )
2016-05-18 21:38:21 +00:00
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-11-05 10:03:47 +00:00
Form . setMinimumSize ( QtCore . QSize ( 270 , 75 ) )
Form . setMaximumSize ( QtCore . QSize ( 270 , 75 ) )
Form . setBaseSize ( QtCore . QSize ( 270 , 75 ) )
2016-03-07 18:00:00 +00:00
self . avatar_label = Form . avatar_label = QtGui . QLabel ( Form )
2016-11-05 10:03:47 +00:00
self . avatar_label . setGeometry ( QtCore . QRect ( 5 , 5 , 64 , 64 ) )
2016-08-04 15:23:47 +00:00
self . avatar_label . setScaledContents ( False )
2016-07-13 18:30:51 +00:00
self . avatar_label . setAlignment ( QtCore . Qt . AlignCenter )
2016-04-01 17:44:02 +00:00
self . name = Form . name = DataLabel ( Form )
2016-11-05 10:03:47 +00:00
Form . name . setGeometry ( QtCore . QRect ( 75 , 15 , 150 , 25 ) )
2016-02-17 20:47:43 +00:00
font = QtGui . QFont ( )
2016-08-05 12:58:25 +00:00
font . setFamily ( settings . Settings . get_instance ( ) [ ' font ' ] )
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-11-05 10:03:47 +00:00
Form . status_message . setGeometry ( QtCore . QRect ( 75 , 35 , 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-11-05 10:03:47 +00:00
Form . connection_status . setGeometry ( QtCore . QRect ( 230 , 10 , 32 , 32 ) )
2016-07-28 20:00:04 +00:00
self . avatar_label . mouseReleaseEvent = self . profile_settings
self . status_message . mouseReleaseEvent = self . profile_settings
self . name . mouseReleaseEvent = self . profile_settings
2016-03-11 11:37:45 +00:00
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-11-05 10:03:47 +00:00
Form . resize ( 650 , 75 )
2016-03-07 18:00:00 +00:00
self . account_avatar = QtGui . QLabel ( Form )
2016-11-05 10:03:47 +00:00
self . account_avatar . setGeometry ( QtCore . QRect ( 10 , 5 , 64 , 64 ) )
2016-08-04 15:23:47 +00:00
self . account_avatar . setScaledContents ( False )
2016-04-01 17:44:02 +00:00
self . account_name = DataLabel ( Form )
2016-11-05 10:03:47 +00:00
self . account_name . setGeometry ( QtCore . QRect ( 100 , 0 , 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-08-05 12:58:25 +00:00
font . setFamily ( settings . Settings . get_instance ( ) [ ' font ' ] )
2016-03-07 18:00:00 +00:00
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-11-05 10:03:47 +00:00
self . account_status . setGeometry ( QtCore . QRect ( 100 , 20 , 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-11-05 10:03:47 +00:00
self . callButton . setGeometry ( QtCore . QRect ( 550 , 5 , 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 )
2016-11-05 10:03:47 +00:00
self . videocallButton . setGeometry ( QtCore . QRect ( 550 , 5 , 50 , 50 ) )
2016-06-07 19:43:25 +00:00
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-11-05 10:03:47 +00:00
self . typing . setGeometry ( QtCore . QRect ( 500 , 25 , 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-10-30 15:13:12 +00:00
self . friends_list . setVerticalScrollBarPolicy ( QtCore . Qt . ScrollBarAlwaysOn )
self . friends_list . setHorizontalScrollBarPolicy ( QtCore . Qt . ScrollBarAlwaysOff )
2016-11-05 21:08:01 +00:00
self . friends_list . verticalScrollBar ( ) . setContextMenuPolicy ( QtCore . Qt . NoContextMenu )
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-08-08 19:11:43 +00:00
self . messages . focusOutEvent = lambda event : self . messages . clearSelection ( )
2016-11-05 21:08:01 +00:00
self . messages . verticalScrollBar ( ) . setContextMenuPolicy ( QtCore . Qt . NoContextMenu )
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-07-27 11:50:36 +00:00
self . messages . setSelectionMode ( QtGui . QAbstractItemView . ExtendedSelection )
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-11-05 10:03:47 +00:00
menu = QtGui . QWidget ( )
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-11-05 10:03:47 +00:00
self . setup_menu ( menu )
2016-06-11 21:40:58 +00:00
if not Settings . get_instance ( ) [ ' mirror_mode ' ] :
2016-11-05 10:03:47 +00:00
grid . addWidget ( search , 2 , 0 )
grid . addWidget ( name , 1 , 0 )
grid . addWidget ( messages , 2 , 1 , 2 , 1 )
grid . addWidget ( info , 1 , 1 )
grid . addWidget ( message_buttons , 4 , 1 )
grid . addWidget ( main_list , 3 , 0 , 2 , 1 )
2016-06-11 21:40:58 +00:00
grid . setColumnMinimumWidth ( 1 , 500 )
grid . setColumnMinimumWidth ( 0 , 270 )
else :
2016-11-05 10:03:47 +00:00
grid . addWidget ( search , 2 , 1 )
grid . addWidget ( name , 1 , 1 )
grid . addWidget ( messages , 2 , 0 , 2 , 1 )
grid . addWidget ( info , 1 , 0 )
grid . addWidget ( message_buttons , 4 , 0 )
grid . addWidget ( main_list , 3 , 1 , 2 , 1 )
2016-06-11 21:40:58 +00:00
grid . setColumnMinimumWidth ( 0 , 500 )
2016-06-18 20:29:49 +00:00
grid . setColumnMinimumWidth ( 1 , 270 )
2016-11-05 10:03:47 +00:00
grid . addWidget ( menu , 0 , 0 , 1 , 2 )
2016-06-15 12:38:42 +00:00
grid . setSpacing ( 0 )
grid . setContentsMargins ( 0 , 0 , 0 , 0 )
2016-11-05 10:03:47 +00:00
grid . setRowMinimumHeight ( 0 , 25 )
grid . setRowMinimumHeight ( 1 , 75 )
grid . setRowMinimumHeight ( 2 , 25 )
grid . setRowMinimumHeight ( 3 , 320 )
grid . setRowMinimumHeight ( 4 , 55 )
2016-05-02 15:27:46 +00:00
grid . setColumnStretch ( 1 , 1 )
2016-11-05 10:03:47 +00:00
grid . setRowStretch ( 3 , 1 )
2016-02-21 14:32:38 +00:00
main . setLayout ( grid )
self . setCentralWidget ( main )
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-08-05 12:58:25 +00:00
def closeEvent ( self , event ) :
2016-06-17 11:53:33 +00:00
s = Settings . get_instance ( )
2016-08-05 12:58:25 +00:00
if not s [ ' close_to_tray ' ] or s . closing :
2016-10-01 20:06:15 +00:00
if not self . _saved :
self . _saved = True
self . profile . save_history ( )
self . profile . close ( )
s [ ' x ' ] = self . geometry ( ) . x ( )
s [ ' y ' ] = self . geometry ( ) . y ( )
s [ ' width ' ] = self . width ( )
s [ ' height ' ] = self . height ( )
s . save ( )
QtGui . QApplication . closeAllWindows ( )
event . accept ( )
2016-09-23 17:37:32 +00:00
elif QtGui . QSystemTrayIcon . isSystemTrayAvailable ( ) :
2016-08-05 12:58:25 +00:00
event . ignore ( )
self . hide ( )
2016-03-12 20:18:13 +00:00
2016-09-26 18:58:14 +00:00
def close_window ( self ) :
Settings . get_instance ( ) . closing = True
self . close ( )
2016-05-02 15:27:46 +00:00
def resizeEvent ( self , * args , * * kwargs ) :
2016-11-20 11:12:27 +00:00
if platform . system ( ) == ' Windows ' :
self . messages . setGeometry ( 0 , 0 , self . width ( ) - 270 , self . height ( ) - 155 )
self . friends_list . setGeometry ( 0 , 0 , 270 , self . height ( ) - 125 )
else :
self . messages . setGeometry ( 0 , 0 , self . width ( ) - 270 , self . height ( ) - 159 )
self . friends_list . setGeometry ( 0 , 0 , 270 , self . height ( ) - 129 )
2016-06-11 21:40:58 +00:00
2016-11-05 10:03:47 +00:00
self . videocallButton . setGeometry ( QtCore . QRect ( self . width ( ) - 330 , 10 , 50 , 50 ) )
self . callButton . setGeometry ( QtCore . QRect ( self . width ( ) - 390 , 10 , 50 , 50 ) )
self . typing . setGeometry ( QtCore . QRect ( self . width ( ) - 450 , 20 , 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-11-05 10:03:47 +00:00
self . account_name . setGeometry ( QtCore . QRect ( 100 , 15 , self . width ( ) - 560 , 25 ) )
self . account_status . setGeometry ( QtCore . QRect ( 100 , 35 , 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 ) :
2016-09-23 17:37:32 +00:00
if event . key ( ) == QtCore . Qt . Key_Escape and QtGui . QSystemTrayIcon . isSystemTrayAvailable ( ) :
2016-05-07 21:47:10 +00:00
self . hide ( )
2016-07-29 12:27:46 +00:00
elif event . key ( ) == QtCore . Qt . Key_C and event . modifiers ( ) & QtCore . Qt . ControlModifier and self . messages . selectedIndexes ( ) :
rows = list ( map ( lambda x : self . messages . row ( x ) , self . messages . selectedItems ( ) ) )
indexes = ( rows [ 0 ] - self . messages . count ( ) , rows [ - 1 ] - self . messages . count ( ) )
s = self . profile . export_history ( self . profile . active_friend , True , indexes )
clipboard = QtGui . QApplication . clipboard ( )
clipboard . setText ( s )
elif event . key ( ) == QtCore . Qt . Key_Z and event . modifiers ( ) & QtCore . Qt . ControlModifier and self . messages . selectedIndexes ( ) :
self . messages . clearSelection ( )
2017-02-12 14:58:23 +00:00
elif event . key ( ) == QtCore . Qt . Key_F and event . modifiers ( ) & QtCore . Qt . ControlModifier :
self . show_search_field ( )
2016-05-07 21:47:10 +00:00
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-07-28 15:04:02 +00:00
msgBox . setText ( text + util . program_version + ' \n GitHub: https://github.com/toxygen-project/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 = ' ' ) :
2016-07-26 18:03:18 +00:00
self . a_c = AddContact ( link or ' ' )
2016-02-23 20:26:37 +00:00
self . a_c . show ( )
2016-07-28 20:00:04 +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-09-30 20:48:30 +00:00
def update_settings ( self ) :
self . update_s = UpdateSettings ( )
self . update_s . show ( )
2017-03-15 20:17:38 +00:00
def reload_plugins ( self ) :
plugin_loader = plugin_support . PluginLoader . get_instance ( )
if plugin_loader is None :
return
plugin_loader . stop ( )
plugin_loader . load ( )
2016-07-07 10:54:02 +00:00
def import_plugin ( self ) :
import util
directory = QtGui . QFileDialog . getExistingDirectory ( self ,
QtGui . QApplication . translate ( " MainWindow " , ' Choose folder with plugin ' ,
None ,
QtGui . QApplication . UnicodeUTF8 ) ,
util . curr_directory ( ) ,
QtGui . QFileDialog . ShowDirsOnly | QtGui . QFileDialog . DontUseNativeDialog )
if directory :
src = directory + ' / '
dest = curr_directory ( ) + ' /plugins/ '
util . copy ( src , dest )
msgBox = QtGui . QMessageBox ( )
msgBox . setWindowTitle (
QtGui . QApplication . translate ( " MainWindow " , " Restart Toxygen " , None , QtGui . QApplication . UnicodeUTF8 ) )
msgBox . setText (
QtGui . QApplication . translate ( " MainWindow " , ' Plugin will be loaded after restart ' , None ,
QtGui . QApplication . UnicodeUTF8 ) )
msgBox . exec_ ( )
2016-07-02 12:40:06 +00:00
def lock_app ( self ) :
2017-02-11 17:07:28 +00:00
if toxes . ToxES . get_instance ( ) . has_password ( ) :
2016-07-02 12:40:06 +00:00
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 ( ) ,
2016-10-30 15:13:12 +00:00
self . y ( ) + self . height ( ) - 200 ,
self . sticker . width ( ) ,
self . sticker . height ( ) ) )
2016-06-17 10:31:48 +00:00
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-10-31 21:04:48 +00:00
if friend is None :
return
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 ) )
2016-07-28 20:00:04 +00:00
history_menu = self . listMenu . addMenu ( QtGui . QApplication . translate ( " MainWindow " , ' Chat history ' , None , QtGui . QApplication . UnicodeUTF8 ) )
clear_history_item = history_menu . addAction ( QtGui . QApplication . translate ( " MainWindow " , ' Clear history ' , None , QtGui . QApplication . UnicodeUTF8 ) )
export_to_text_item = history_menu . addAction ( QtGui . QApplication . translate ( " MainWindow " , ' Export as text ' , None , QtGui . QApplication . UnicodeUTF8 ) )
export_to_html_item = history_menu . addAction ( QtGui . QApplication . translate ( " MainWindow " , ' Export as HTML ' , None , QtGui . QApplication . UnicodeUTF8 ) )
2016-07-04 21:24:44 +00:00
copy_menu = self . listMenu . addMenu ( QtGui . QApplication . translate ( " MainWindow " , ' Copy ' , None , QtGui . QApplication . UnicodeUTF8 ) )
copy_name_item = copy_menu . addAction ( QtGui . QApplication . translate ( " MainWindow " , ' Name ' , None , QtGui . QApplication . UnicodeUTF8 ) )
copy_status_item = copy_menu . addAction ( QtGui . QApplication . translate ( " MainWindow " , ' Status message ' , None , QtGui . QApplication . UnicodeUTF8 ) )
copy_key_item = copy_menu . addAction ( QtGui . QApplication . translate ( " MainWindow " , ' 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 ) )
2017-03-08 10:37:19 +00:00
block_item = self . listMenu . addAction ( QtGui . QApplication . translate ( " MainWindow " , ' Block 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 ) )
2017-03-15 20:17:38 +00:00
plugins_loader = plugin_support . PluginLoader . get_instance ( )
if plugins_loader is not None :
submenu = plugins_loader . 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 ) )
2017-03-08 10:37:19 +00:00
self . connect ( block_item , QtCore . SIGNAL ( " triggered() " ) , lambda : self . block_friend ( num ) )
2016-03-18 16:33:54 +00:00
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-07-04 21:24:44 +00:00
self . connect ( copy_name_item , QtCore . SIGNAL ( " triggered() " ) , lambda : self . copy_name ( friend ) )
self . connect ( copy_status_item , QtCore . SIGNAL ( " triggered() " ) , lambda : self . copy_status ( friend ) )
2016-07-29 12:27:46 +00:00
self . connect ( export_to_text_item , QtCore . SIGNAL ( " triggered() " ) , lambda : self . export_history ( num ) )
2016-07-28 20:00:04 +00:00
self . connect ( export_to_html_item , QtCore . SIGNAL ( " triggered() " ) ,
2016-07-29 12:27:46 +00:00
lambda : self . export_history ( num , False ) )
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-07-29 12:27:46 +00:00
def export_history ( self , num , as_text = True ) :
s = self . profile . export_history ( num , as_text )
directory = QtGui . QFileDialog . getExistingDirectory ( None ,
QtGui . QApplication . translate ( " MainWindow " , ' Choose folder ' ,
None ,
QtGui . QApplication . UnicodeUTF8 ) ,
curr_directory ( ) ,
QtGui . QFileDialog . ShowDirsOnly | QtGui . QFileDialog . DontUseNativeDialog )
if directory :
name = ' exported_history_ {} . {} ' . format ( convert_time ( time . time ( ) ) , ' txt ' if as_text else ' html ' )
with open ( directory + ' / ' + name , ' wt ' ) as fl :
fl . write ( s )
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 )
2017-03-08 10:37:19 +00:00
def block_friend ( self , num ) :
friend = self . profile . get_friend ( num )
self . profile . block_user ( friend . tox_id )
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-07-04 21:24:44 +00:00
def copy_name ( self , friend ) :
clipboard = QtGui . QApplication . clipboard ( )
clipboard . setText ( friend . name )
def copy_status ( self , friend ) :
clipboard = QtGui . QApplication . clipboard ( )
clipboard . setText ( friend . status_message )
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
2017-01-21 21:19:56 +00:00
def show ( self ) :
super ( ) . show ( )
self . profile . update ( )
2016-03-02 16:05:03 +00:00
def filtering ( self ) :
2016-10-30 15:13:12 +00:00
ind = self . online_contacts . currentIndex ( )
d = { 0 : 0 , 1 : 1 , 2 : 2 , 3 : 4 , 4 : 1 | 4 , 5 : 2 | 4 }
self . profile . filtration_and_sorting ( d [ ind ] , self . contact_name . text ( ) )
2017-02-12 14:58:23 +00:00
def show_search_field ( self ) :
if hasattr ( self , ' search_field ' ) and self . search_field . isVisible ( ) :
return
2017-02-12 16:46:53 +00:00
if self . profile . get_curr_friend ( ) is None :
return
2017-02-12 14:58:23 +00:00
self . search_field = SearchScreen ( self . messages , self . messages . width ( ) , self . messages . parent ( ) )
x , y = self . messages . x ( ) , self . messages . y ( ) + self . messages . height ( ) - 40
self . search_field . setGeometry ( x , y , self . messages . width ( ) , 40 )
self . messages . setGeometry ( x , self . messages . y ( ) , self . messages . width ( ) , self . messages . height ( ) - 40 )
self . search_field . show ( )