2007-11-14 22:18:48 -05:00
/****************************************************************
* RetroShare is distributed under the following license :
*
* Copyright ( C ) 2006 , 2007 crypton
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
2009-08-09 10:39:47 -04:00
* Foundation , Inc . , 51 Franklin Street , Fifth Floor ,
2007-11-14 22:18:48 -05:00
* Boston , MA 02110 - 1301 , USA .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include <QMessageBox>
# include <QString>
# include <QtDebug>
# include <QIcon>
# include <QPixmap>
2010-07-23 14:52:58 -04:00
# include <QColorDialog>
2010-11-17 20:18:31 -05:00
# include <QDesktopServices>
# include <QUrl>
2007-11-14 22:18:48 -05:00
2010-02-25 08:12:18 -05:00
# ifdef BLOGS
2010-02-24 07:58:24 -05:00
# include "gui/unfinished/blogs/BlogsDialog.h"
# endif
2008-11-29 15:17:58 -05:00
2011-06-16 17:59:26 -04:00
# include <retroshare/rsplugin.h>
2011-07-30 13:13:08 -04:00
# include <retroshare/rsconfig.h>
2009-08-21 13:58:55 -04:00
# include "rshare.h"
2007-11-14 22:18:48 -05:00
# include "MainWindow.h"
# include "MessengerWindow.h"
2010-06-08 17:38:36 -04:00
# include "NetworkDialog.h"
# include "SearchDialog.h"
# include "TransfersDialog.h"
# include "MessagesDialog.h"
# include "SharedFilesDialog.h"
# include "PluginsPage.h"
# include "ShareManager.h"
# include "NetworkView.h"
# include "ForumsDialog.h"
2011-05-17 13:27:47 -04:00
# include "FriendsDialog.h"
2007-11-14 22:18:48 -05:00
# include "HelpDialog.h"
2009-12-30 21:23:02 -05:00
# include "AboutDialog.h"
2010-01-08 08:00:00 -05:00
# include "QuickStartWizard.h"
2010-07-23 14:52:58 -04:00
# include "ChannelFeed.h"
# include "bwgraph/bwgraph.h"
# include "help/browser/helpbrowser.h"
2010-09-01 13:56:15 -04:00
# include "chat/PopupChatDialog.h"
2010-11-17 20:18:31 -05:00
# include "RetroShareLink.h"
2010-07-23 14:52:58 -04:00
# ifdef UNFINISHED
# include "unfinished/ApplicationWindow.h"
# endif
2007-11-14 22:18:48 -05:00
2011-07-11 14:53:14 -04:00
# define GETSTARTED_GUI 1
# ifdef GETSTARTED_GUI
# include "gui/GetStartedDialog.h"
# endif
2009-08-16 16:10:53 -04:00
# include "gui/TurtleRouterDialog.h"
2010-07-17 19:19:43 -04:00
# include "idle/idle.h"
2009-03-15 18:45:40 -04:00
2008-06-15 11:34:56 -04:00
# include "statusbar/peerstatus.h"
2009-05-01 08:45:27 -04:00
# include "statusbar/natstatus.h"
2009-05-02 18:14:20 -04:00
# include "statusbar/ratesstatus.h"
2010-10-27 08:49:46 -04:00
# include "statusbar/dhtstatus.h"
2010-10-09 14:35:34 -04:00
# include "statusbar/hashingstatus.h"
2011-01-07 11:56:57 -05:00
# include "statusbar/discstatus.h"
2010-08-06 05:40:23 -04:00
# include <retroshare/rsstatus.h>
2009-05-01 08:45:27 -04:00
2010-08-06 05:40:23 -04:00
# include <retroshare/rsiface.h>
# include <retroshare/rspeers.h>
# include <retroshare/rsfiles.h>
2010-08-09 17:20:34 -04:00
# include <retroshare/rsforums.h>
2010-10-06 20:17:42 -04:00
# include <retroshare/rschannels.h>
2010-09-01 13:56:15 -04:00
# include <retroshare/rsnotify.h>
2007-11-14 22:18:48 -05:00
2009-03-26 12:58:06 -04:00
# include "gui/connect/ConnectFriendWizard.h"
2009-08-13 11:11:08 -04:00
# include "util/rsversion.h"
2009-08-21 13:58:55 -04:00
# include "settings/rsettingswin.h"
2010-05-11 16:02:52 -04:00
# include "settings/rsharesettings.h"
2010-09-12 10:10:28 -04:00
# include "common/StatusDefs.h"
2007-11-14 22:18:48 -05:00
2008-06-09 20:48:18 -04:00
# include <sstream>
# include <iomanip>
2008-12-07 13:34:54 -05:00
# include <unistd.h>
2007-11-14 22:18:48 -05:00
2011-07-07 08:05:36 -04:00
/****
*
* # define USE_DHTWINDOW 1
*
* * * */
2011-07-10 14:20:30 -04:00
# define USE_DHTWINDOW 1
2011-07-07 08:05:36 -04:00
2011-07-06 09:08:27 -04:00
# ifdef USE_DHTWINDOW
# include "dht/DhtWindow.h"
# endif
2010-03-04 13:08:24 -05:00
# define FONT QFont("Arial", 9)
2007-11-14 22:18:48 -05:00
/* Images for toolbar icons */
2009-08-21 13:58:55 -04:00
# define IMAGE_NETWORK2 ": / images / rs1.png"
2011-03-04 05:22:00 -05:00
# define IMAGE_PEERS ": / images / groupchat.png"
# define IMAGE_SEARCH ": / images / filefind.png"
# define IMAGE_TRANSFERS ": / images / ktorrent32.png"
# define IMAGE_FILES ": / images / fileshare32.png"
# define IMAGE_CHANNELS ": / images / channels.png"
2008-11-15 18:47:17 -05:00
# define IMAGE_FORUMS ": / images / konversation.png"
2008-08-14 20:23:27 -04:00
# define IMAGE_PREFERENCES ": / images / kcmsystem24.png"
2011-03-04 05:22:00 -05:00
# define IMAGE_CHAT ": / images / groupchat.png"
2007-11-14 22:18:48 -05:00
# define IMAGE_RETROSHARE ": / images / rstray3.png"
# define IMAGE_ABOUT ": / images / informations_24x24.png"
# define IMAGE_STATISTIC ": / images / utilities-system-monitor.png"
# define IMAGE_MESSAGES ": / images / evolution.png"
# define IMAGE_BWGRAPH ": / images / ksysguard.png"
2008-03-31 08:06:56 -04:00
# define IMAGE_RSM32 ": / images / kdmconfig.png"
2007-11-14 22:18:48 -05:00
# define IMAGE_RSM16 ": / images / rsmessenger16.png"
# define IMAGE_CLOSE ": / images / close_normal.png"
2011-03-04 05:22:00 -05:00
# define IMAGE_BLOCK ": / images / blockdevice.png"
# define IMAGE_COLOR ": / images / highlight.png"
2008-03-30 17:05:14 -04:00
# define IMAGE_GAMES ": / images / kgames.png"
# define IMAGE_PHOTO ": / images / lphoto.png"
2008-03-30 19:28:57 -04:00
# define IMAGE_ADDFRIEND ": / images / add-friend24.png"
# define IMAGE_ADDSHARE ": / images / directoryadd_24x24_shadow.png"
# define IMAGE_OPTIONS ": / images / settings.png"
# define IMAGE_QUIT ": / images / exit_24x24.png"
2008-07-31 11:29:14 -04:00
# define IMAGE_UNFINISHED ": / images / underconstruction.png"
2008-08-02 16:26:29 -04:00
# define IMAGE_MINIMIZE ": / images / window_nofullscreen.png"
# define IMAGE_MAXIMIZE ": / images / window_fullscreen.png"
2008-08-05 14:36:07 -04:00
# define IMG_HELP ": / images / help.png"
2008-11-29 15:17:58 -05:00
# define IMAGE_NEWSFEED ": / images / konqsidebar_news24.png"
2009-02-01 20:30:15 -05:00
# define IMAGE_PLUGINS ": / images / extension_32.png"
2009-05-20 18:51:15 -04:00
# define IMAGE_NOONLINE ": / images / rstray0.png"
# define IMAGE_ONEONLINE ": / images / rstray1.png"
# define IMAGE_TWOONLINE ": / images / rstray2.png"
2010-02-19 18:23:19 -05:00
# define IMAGE_BLOGS ": / images / kblogger.png"
2009-02-01 20:30:15 -05:00
2010-05-02 20:09:55 -04:00
/*static*/ MainWindow * MainWindow : : _instance = NULL ;
/** create main window */
/*static*/ MainWindow * MainWindow : : Create ( )
{
if ( _instance = = NULL ) {
2010-07-17 19:19:43 -04:00
/* _instance is set in constructor */
new MainWindow ( ) ;
2010-05-02 20:09:55 -04:00
}
return _instance ;
}
2007-11-14 22:18:48 -05:00
2010-07-17 19:19:43 -04:00
/*static*/ MainWindow * MainWindow : : getInstance ( )
{
return _instance ;
}
2007-11-14 22:18:48 -05:00
/** Constructor */
MainWindow : : MainWindow ( QWidget * parent , Qt : : WFlags flags )
2010-07-21 03:39:14 -04:00
: RWindow ( " MainWindow " , parent , flags )
2007-11-14 22:18:48 -05:00
{
/* Invoke the Qt Designer generated QObject setup routine */
ui . setupUi ( this ) ;
2010-07-17 19:19:43 -04:00
_instance = this ;
m_bStatusLoadDone = false ;
isIdle = false ;
2011-07-13 15:24:33 -04:00
notifyMenu = NULL ;
2010-11-25 19:54:18 -05:00
trayIconMessages = NULL ;
trayIconForums = NULL ;
trayIconChannels = NULL ;
trayIconChat = NULL ;
trayIconTransfers = NULL ;
trayActionMessages = NULL ;
trayActionForums = NULL ;
trayActionChannels = NULL ;
trayActionChat = NULL ;
trayActionTransfers = NULL ;
2011-05-01 19:30:45 -04:00
/* Calculate only once */
RsPeerDetails pd ;
if ( rsPeers - > getPeerDetails ( rsPeers - > getOwnId ( ) , pd ) ) {
nameAndLocation = QString ( " %1 (%2) " ) . arg ( QString : : fromUtf8 ( pd . name . c_str ( ) ) ) . arg ( QString : : fromUtf8 ( pd . location . c_str ( ) ) ) ;
}
setWindowTitle ( tr ( " RetroShare %1 a secure decentralised communication platform " ) . arg ( retroshareVersion ( ) ) + " - " + nameAndLocation ) ;
2009-08-09 10:39:47 -04:00
2011-07-30 13:13:08 -04:00
/* WORK OUT IF WE"RE IN ADVANCED MODE OR NOT */
bool advancedMode = false ;
std : : string advsetting ;
if ( rsConfig - > getConfigurationOption ( RS_CONFIG_ADVANCED , advsetting ) & & ( advsetting = = " YES " ) )
{
advancedMode = true ;
}
2010-11-17 20:18:31 -05:00
/* add url handler for RetroShare links */
2010-11-18 11:31:44 -05:00
QDesktopServices : : setUrlHandler ( RSLINK_SCHEME , this , " linkActivated " ) ;
2010-11-17 20:18:31 -05:00
2007-11-14 22:18:48 -05:00
// Setting icons
this - > setWindowIcon ( QIcon ( QString : : fromUtf8 ( " :/images/rstray3.png " ) ) ) ;
2009-08-09 10:39:47 -04:00
2007-11-14 22:18:48 -05:00
/* Create all the dialogs of which we only want one instance */
_bandwidthGraph = new BandwidthGraph ( ) ;
2009-11-30 11:12:13 -05:00
2010-02-24 07:58:24 -05:00
# ifdef UNFINISHED
2007-11-14 22:18:48 -05:00
applicationWindow = new ApplicationWindow ( ) ;
applicationWindow - > hide ( ) ;
2010-02-24 07:58:24 -05:00
# endif
2009-08-09 10:39:47 -04:00
2009-05-01 12:17:24 -04:00
/** Left Side ToolBar**/
2008-03-31 02:31:57 -04:00
connect ( ui . actionAdd_Friend , SIGNAL ( triggered ( ) ) , this , SLOT ( addFriend ( ) ) ) ;
2008-12-10 20:19:34 -05:00
connect ( ui . actionAdd_Share , SIGNAL ( triggered ( ) ) , this , SLOT ( openShareManager ( ) ) ) ;
2009-08-21 13:58:55 -04:00
connect ( ui . actionOptions , SIGNAL ( triggered ( ) ) , this , SLOT ( showSettings ( ) ) ) ;
2008-03-31 09:00:00 -04:00
connect ( ui . actionMessenger , SIGNAL ( triggered ( ) ) , this , SLOT ( showMessengerWindow ( ) ) ) ;
2010-04-18 15:54:19 -04:00
ui . actionMessenger - > setVisible ( true ) ;
2008-03-31 09:00:00 -04:00
connect ( ui . actionAbout , SIGNAL ( triggered ( ) ) , this , SLOT ( showabout ( ) ) ) ;
2009-09-12 12:39:50 -04:00
//connect(ui.actionColor, SIGNAL(triggered()), this, SLOT( setStyle()) );
2009-08-09 10:39:47 -04:00
2007-11-14 22:18:48 -05:00
/** adjusted quit behaviour: trigger a warning that can be switched off in the saved
config file RetroShare . conf */
2009-05-01 12:17:24 -04:00
connect ( ui . actionQuit , SIGNAL ( triggered ( ) ) , this , SLOT ( doQuit ( ) ) ) ;
2008-03-31 02:31:57 -04:00
2008-01-18 18:18:21 -05:00
/* load the StyleSheet*/
2009-08-09 10:39:47 -04:00
loadStyleSheet ( Rshare : : stylesheet ( ) ) ;
2007-11-14 22:18:48 -05:00
2008-03-30 17:05:14 -04:00
/* Create the Main pages and actions */
2007-11-14 22:18:48 -05:00
QActionGroup * grp = new QActionGroup ( this ) ;
2008-03-30 19:28:57 -04:00
2007-11-14 22:18:48 -05:00
2009-04-03 16:39:04 -04:00
ui . stackPages - > add ( networkDialog = new NetworkDialog ( ui . stackPages ) ,
2009-04-29 11:48:01 -04:00
createPageAction ( QIcon ( IMAGE_NETWORK2 ) , tr ( " Network " ) , grp ) ) ;
2008-11-29 15:17:58 -05:00
2009-08-09 10:39:47 -04:00
2011-05-17 13:27:47 -04:00
ui . stackPages - > add ( friendsDialog = new FriendsDialog ( ui . stackPages ) ,
2007-11-14 22:18:48 -05:00
createPageAction ( QIcon ( IMAGE_PEERS ) , tr ( " Friends " ) , grp ) ) ;
2008-11-29 15:17:58 -05:00
2009-08-10 19:44:46 -04:00
2007-11-14 22:18:48 -05:00
ui . stackPages - > add ( searchDialog = new SearchDialog ( ui . stackPages ) ,
createPageAction ( QIcon ( IMAGE_SEARCH ) , tr ( " Search " ) , grp ) ) ;
2009-08-09 10:39:47 -04:00
2009-08-10 19:44:46 -04:00
2007-11-14 22:18:48 -05:00
ui . stackPages - > add ( transfersDialog = new TransfersDialog ( ui . stackPages ) ,
2010-11-24 19:20:25 -05:00
transferAction = createPageAction ( QIcon ( IMAGE_TRANSFERS ) , tr ( " Transfers " ) , grp ) ) ;
2009-08-09 10:39:47 -04:00
2007-11-14 22:18:48 -05:00
ui . stackPages - > add ( sharedfilesDialog = new SharedFilesDialog ( ui . stackPages ) ,
2009-08-09 10:39:47 -04:00
createPageAction ( QIcon ( IMAGE_FILES ) , tr ( " Files " ) , grp ) ) ;
2007-11-14 22:18:48 -05:00
2008-11-29 15:17:58 -05:00
2007-11-14 22:18:48 -05:00
ui . stackPages - > add ( messagesDialog = new MessagesDialog ( ui . stackPages ) ,
2010-03-28 16:46:45 -04:00
messageAction = createPageAction ( QIcon ( IMAGE_MESSAGES ) , tr ( " Messages " ) , grp ) ) ;
2008-03-30 17:05:14 -04:00
2009-02-02 08:01:53 -05:00
ui . stackPages - > add ( channelFeed = new ChannelFeed ( ui . stackPages ) ,
2010-10-06 20:17:42 -04:00
channelAction = createPageAction ( QIcon ( IMAGE_CHANNELS ) , tr ( " Channels " ) , grp ) ) ;
2010-02-19 18:23:19 -05:00
2010-11-20 15:58:35 -05:00
# ifdef BLOGS
2011-06-16 17:59:26 -04:00
ui . stackPages - > add ( blogsFeed = new BlogsDialog ( ui . stackPages ) , createPageAction ( QIcon ( IMAGE_BLOGS ) , tr ( " Blogs " ) , grp ) ) ;
2010-11-20 15:58:35 -05:00
# endif
2010-02-04 16:47:34 -05:00
2008-11-15 18:47:17 -05:00
ui . stackPages - > add ( forumsDialog = new ForumsDialog ( ui . stackPages ) ,
2010-08-09 17:20:34 -04:00
forumAction = createPageAction ( QIcon ( IMAGE_FORUMS ) , tr ( " Forums " ) , grp ) ) ;
2010-02-06 15:49:24 -05:00
2011-06-16 17:59:26 -04:00
std : : cerr < < " Looking for interfaces in existing plugins: " < < std : : endl ;
2011-07-13 15:24:33 -04:00
for ( int i = 0 ; i < rsPlugins - > nbPlugins ( ) ; + + i )
2011-06-16 17:59:26 -04:00
{
2011-07-05 16:29:07 -04:00
QIcon icon ;
if ( rsPlugins - > plugin ( i ) ! = NULL & & rsPlugins - > plugin ( i ) - > qt_page ( ) ! = NULL )
2011-06-16 17:59:26 -04:00
{
2011-07-05 16:29:07 -04:00
if ( rsPlugins - > plugin ( i ) - > qt_icon ( ) ! = NULL )
icon = * rsPlugins - > plugin ( i ) - > qt_icon ( ) ;
else
icon = QIcon ( " :images/extension_48.png " ) ;
2011-06-16 17:59:26 -04:00
std : : cerr < < " Addign widget page for plugin " < < rsPlugins - > plugin ( i ) - > getPluginName ( ) < < std : : endl ;
2011-07-05 16:29:07 -04:00
ui . stackPages - > add ( rsPlugins - > plugin ( i ) - > qt_page ( ) , createPageAction ( icon , QString : : fromStdString ( rsPlugins - > plugin ( i ) - > getPluginName ( ) ) , grp ) ) ;
2011-06-16 17:59:26 -04:00
}
2011-07-05 16:29:07 -04:00
else if ( rsPlugins - > plugin ( i ) = = NULL )
std : : cerr < < " No plugin object ! " < < std : : endl ;
else
std : : cerr < < " No plugin page ! " < < std : : endl ;
2011-06-16 17:59:26 -04:00
}
2009-08-09 10:39:47 -04:00
2010-11-20 15:58:35 -05:00
# ifndef RS_RELEASE_VERSION
# ifdef PLUGINMGR
2009-02-11 17:50:12 -05:00
ui . stackPages - > add ( pluginsPage = new PluginsPage ( ui . stackPages ) ,
createPageAction ( QIcon ( IMAGE_PLUGINS ) , tr ( " Plugins " ) , grp ) ) ;
2010-11-20 15:58:35 -05:00
# endif
# endif
2009-07-23 13:11:51 -04:00
2011-07-11 14:53:14 -04:00
# ifdef GETSTARTED_GUI
MainPage * getStartedPage = NULL ;
2011-07-30 13:13:08 -04:00
if ( ! advancedMode )
{
ui . stackPages - > add ( getStartedPage = new GetStartedDialog ( ui . stackPages ) ,
2011-07-11 14:53:14 -04:00
createPageAction ( QIcon ( IMG_HELP ) , tr ( " Getting Started " ) , grp ) ) ;
2011-07-30 13:13:08 -04:00
}
2011-07-11 14:53:14 -04:00
# endif
2007-11-14 22:18:48 -05:00
/* Create the toolbar */
ui . toolBar - > addActions ( grp - > actions ( ) ) ;
2010-03-03 16:55:07 -05:00
2007-11-14 22:18:48 -05:00
connect ( grp , SIGNAL ( triggered ( QAction * ) ) , ui . stackPages , SLOT ( showPage ( QAction * ) ) ) ;
2009-05-01 20:12:29 -04:00
2010-07-18 17:28:56 -04:00
# ifdef UNFINISHED
2010-03-03 16:55:07 -05:00
ui . toolBar - > addSeparator ( ) ;
2009-08-09 10:39:47 -04:00
addAction ( new QAction ( QIcon ( IMAGE_UNFINISHED ) , tr ( " Unfinished " ) , ui . toolBar ) , SLOT ( showApplWindow ( ) ) ) ;
2009-05-01 20:12:29 -04:00
# endif
2009-07-23 13:11:51 -04:00
2010-11-04 07:14:47 -04:00
if ( activatePage ( ( Page ) Settings - > getLastPageInMainWindow ( ) ) = = false ) {
/* Select the first action */
grp - > actions ( ) [ 0 ] - > setChecked ( true ) ;
}
2009-08-09 10:39:47 -04:00
2009-08-10 19:44:46 -04:00
/** StatusBar section ********/
2010-07-18 17:28:56 -04:00
/* initialize combobox in status bar */
statusComboBox = new QComboBox ( statusBar ( ) ) ;
2010-07-20 15:45:07 -04:00
initializeStatusObject ( statusComboBox , true ) ;
2010-07-18 17:28:56 -04:00
QWidget * widget = new QWidget ( ) ;
QHBoxLayout * hbox = new QHBoxLayout ( ) ;
hbox - > setMargin ( 0 ) ;
hbox - > setSpacing ( 6 ) ;
hbox - > addWidget ( statusComboBox ) ;
widget - > setLayout ( hbox ) ;
statusBar ( ) - > addWidget ( widget ) ;
2008-06-16 16:28:16 -04:00
peerstatus = new PeerStatus ( ) ;
statusBar ( ) - > addWidget ( peerstatus ) ;
2009-08-09 10:39:47 -04:00
2009-05-01 08:45:27 -04:00
natstatus = new NATStatus ( ) ;
statusBar ( ) - > addWidget ( natstatus ) ;
2010-10-27 08:49:46 -04:00
dhtstatus = new DHTStatus ( ) ;
statusBar ( ) - > addWidget ( dhtstatus ) ;
2008-06-09 20:48:18 -04:00
2010-10-09 14:35:34 -04:00
hashingstatus = new HashingStatus ( ) ;
statusBar ( ) - > addPermanentWidget ( hashingstatus ) ;
2009-01-04 15:29:55 -05:00
2011-01-07 11:56:57 -05:00
discstatus = new DiscStatus ( ) ;
statusBar ( ) - > addPermanentWidget ( discstatus ) ;
2009-05-02 18:14:20 -04:00
ratesstatus = new RatesStatus ( ) ;
statusBar ( ) - > addPermanentWidget ( ratesstatus ) ;
2009-08-10 19:44:46 -04:00
/** Status Bar end ******/
2009-08-09 10:39:47 -04:00
2009-11-24 15:17:13 -05:00
/* Creates a tray icon with a context menu and adds it to the system's * notification area. */
createTrayIcon ( ) ;
2009-08-09 10:39:47 -04:00
2010-07-20 15:45:07 -04:00
loadOwnStatus ( ) ;
2010-07-17 19:19:43 -04:00
2010-07-18 17:28:56 -04:00
/* Set focus to the current page */
ui . stackPages - > currentWidget ( ) - > setFocus ( ) ;
2010-04-27 08:18:44 -04:00
idle = new Idle ( ) ;
idle - > start ( ) ;
2010-07-17 19:19:43 -04:00
connect ( idle , SIGNAL ( secondsIdle ( int ) ) , this , SLOT ( checkAndSetIdle ( int ) ) ) ;
2010-04-27 08:18:44 -04:00
2009-11-24 15:17:13 -05:00
QTimer * timer = new QTimer ( this ) ;
timer - > connect ( timer , SIGNAL ( timeout ( ) ) , this , SLOT ( updateStatus ( ) ) ) ;
timer - > start ( 1000 ) ;
}
/** Destructor. */
MainWindow : : ~ MainWindow ( )
{
2010-11-04 07:14:47 -04:00
Settings - > setLastPageInMainWindow ( getActivatePage ( ) ) ;
2009-11-24 15:17:13 -05:00
delete peerstatus ;
delete natstatus ;
2010-10-27 08:49:46 -04:00
delete dhtstatus ;
2009-11-24 15:17:13 -05:00
delete ratesstatus ;
2011-01-07 11:56:57 -05:00
delete discstatus ;
2010-05-11 16:02:52 -04:00
MessengerWindow : : releaseInstance ( ) ;
# ifdef UNFINISHED
2009-11-24 15:17:13 -05:00
delete applicationWindow ;
2010-07-18 07:43:39 -04:00
# endif
2009-11-24 15:17:13 -05:00
}
2007-11-14 22:18:48 -05:00
2010-05-21 16:49:48 -04:00
void MainWindow : : displayDiskSpaceWarning ( int loc , int size_limit_mb )
{
QString locString ;
switch ( loc )
{
case RS_PARTIALS_DIRECTORY : locString = " Partials " ;
break ;
case RS_CONFIG_DIRECTORY : locString = " Config " ;
break ;
case RS_DOWNLOAD_DIRECTORY : locString = " Download " ;
break ;
default :
std : : cerr < < " Error: " < < __PRETTY_FUNCTION__ < < " was called with an unknown parameter loc= " < < loc < < std : : endl ;
return ;
}
QMessageBox : : critical ( NULL , tr ( " Low disk space warning " ) ,
tr ( " The disk space in your " ) + locString + tr ( " directory is running low (current limit is " ) + QString : : number ( size_limit_mb ) + tr ( " MB). \n \n RetroShare will now safely suspend any disk access to this directory. \n \n Please make some free space and click Ok. " ) ) ;
}
2009-11-24 15:17:13 -05:00
/** Creates a tray icon with a context menu and adds it to the system
* notification area . */
void MainWindow : : createTrayIcon ( )
{
2009-08-10 19:44:46 -04:00
/** Tray icon Menu **/
2010-11-25 19:54:18 -05:00
QMenu * trayMenu = new QMenu ( this ) ;
2010-01-01 08:45:35 -05:00
QObject : : connect ( trayMenu , SIGNAL ( aboutToShow ( ) ) , this , SLOT ( updateMenu ( ) ) ) ;
2010-08-09 08:16:21 -04:00
toggleVisibilityAction = trayMenu - > addAction ( QIcon ( IMAGE_RETROSHARE ) , tr ( " Show/Hide " ) , this , SLOT ( toggleVisibilitycontextmenu ( ) ) ) ;
2010-07-17 19:19:43 -04:00
2011-07-13 15:24:33 -04:00
/* Create status menu */
QMenu * statusMenu = trayMenu - > addMenu ( tr ( " Status " ) ) ;
initializeStatusObject ( statusMenu , true ) ;
/* Create notify menu */
notifyMenu = trayMenu - > addMenu ( tr ( " Notify " ) ) ;
notifyMenu - > menuAction ( ) - > setVisible ( false ) ;
2010-07-17 19:19:43 -04:00
2010-01-01 08:45:35 -05:00
trayMenu - > addSeparator ( ) ;
2011-05-01 19:30:45 -04:00
trayMenu - > addAction ( QIcon ( IMAGE_RSM16 ) , tr ( " Open Messenger " ) , this , SLOT ( showMessengerWindow ( ) ) ) ;
trayMenu - > addAction ( QIcon ( IMAGE_MESSAGES ) , tr ( " Open Messages " ) , this , SLOT ( showMess ( ) ) ) ;
trayMenu - > addAction ( QIcon ( IMAGE_BWGRAPH ) , tr ( " Bandwidth Graph " ) , _bandwidthGraph , SLOT ( showWindow ( ) ) ) ;
2011-07-06 09:08:27 -04:00
# ifdef USE_DHTWINDOW
trayMenu - > addAction ( QIcon ( IMAGE_RSM16 ) , tr ( " Dht Details " ) , this , SLOT ( showDhtWindow ( ) ) ) ;
# endif
2007-11-18 18:35:53 -05:00
2009-12-05 08:42:24 -05:00
# ifdef UNFINISHED
2011-05-01 19:30:45 -04:00
trayMenu - > addAction ( QIcon ( IMAGE_UNFINISHED ) , tr ( " Applications " ) , this , SLOT ( showApplWindow ( ) ) ) ;
2007-11-14 22:18:48 -05:00
# endif
2011-05-01 19:30:45 -04:00
trayMenu - > addAction ( QIcon ( IMAGE_PREFERENCES ) , tr ( " Options " ) , this , SLOT ( showSettings ( ) ) ) ;
trayMenu - > addAction ( QIcon ( IMG_HELP ) , tr ( " Help " ) , this , SLOT ( showHelpDialog ( ) ) ) ;
2010-01-01 08:45:35 -05:00
trayMenu - > addSeparator ( ) ;
trayMenu - > addAction ( QIcon ( IMAGE_MINIMIZE ) , tr ( " Minimize " ) , this , SLOT ( showMinimized ( ) ) ) ;
trayMenu - > addAction ( QIcon ( IMAGE_MAXIMIZE ) , tr ( " Maximize " ) , this , SLOT ( showMaximized ( ) ) ) ;
trayMenu - > addSeparator ( ) ;
trayMenu - > addAction ( QIcon ( IMAGE_CLOSE ) , tr ( " &Quit " ) , this , SLOT ( doQuit ( ) ) ) ;
2009-08-10 19:44:46 -04:00
/** End of Icon Menu **/
2009-08-09 10:39:47 -04:00
2007-11-14 22:18:48 -05:00
// Create the tray icon
trayIcon = new QSystemTrayIcon ( this ) ;
trayIcon - > setToolTip ( tr ( " RetroShare " ) ) ;
2010-01-01 08:45:35 -05:00
trayIcon - > setContextMenu ( trayMenu ) ;
2009-05-20 18:51:15 -04:00
trayIcon - > setIcon ( QIcon ( IMAGE_NOONLINE ) ) ;
2009-08-09 10:39:47 -04:00
2010-08-09 08:16:21 -04:00
connect ( trayIcon , SIGNAL ( activated ( QSystemTrayIcon : : ActivationReason ) ) , this , SLOT ( toggleVisibility ( QSystemTrayIcon : : ActivationReason ) ) ) ;
2007-11-14 22:18:48 -05:00
trayIcon - > show ( ) ;
2010-08-09 08:16:21 -04:00
2010-11-25 19:54:18 -05:00
createNotifyIcons ( ) ;
}
void MainWindow : : createNotifyIcons ( )
{
2011-07-13 15:24:33 -04:00
# define DELETE_OBJECT(x) if (x) { delete(x); x = NULL; }
2010-11-25 19:54:18 -05:00
int notifyFlag = Settings - > getTrayNotifyFlags ( ) ;
2011-07-13 15:24:33 -04:00
/* Delete notify actions */
DELETE_OBJECT ( trayActionMessages ) ;
DELETE_OBJECT ( trayActionForums ) ;
DELETE_OBJECT ( trayActionChannels ) ;
DELETE_OBJECT ( trayActionChat ) ;
DELETE_OBJECT ( trayActionTransfers ) ;
2010-11-25 19:54:18 -05:00
/* Create systray icons or actions */
if ( notifyFlag & TRAYNOTIFY_MESSAGES ) {
2011-07-13 15:24:33 -04:00
if ( notifyFlag & TRAYNOTIFY_MESSAGES_COMBINED ) {
DELETE_OBJECT ( trayIconMessages ) ;
2010-11-25 19:54:18 -05:00
2011-07-13 15:24:33 -04:00
trayActionMessages = notifyMenu - > addAction ( QIcon ( " :/images/newmsg.png " ) , " " , this , SLOT ( trayIconMessagesClicked ( ) ) ) ;
2010-11-25 19:54:18 -05:00
trayActionMessages - > setVisible ( false ) ;
2011-07-13 15:24:33 -04:00
// trayActionMessages->setData(tr("Messages"));
2010-11-25 19:54:18 -05:00
} else if ( trayIconMessages = = NULL ) {
// Create the tray icon for messages
trayIconMessages = new QSystemTrayIcon ( this ) ;
trayIconMessages - > setIcon ( QIcon ( " :/images/newmsg.png " ) ) ;
connect ( trayIconMessages , SIGNAL ( activated ( QSystemTrayIcon : : ActivationReason ) ) , this , SLOT ( trayIconMessagesClicked ( QSystemTrayIcon : : ActivationReason ) ) ) ;
}
} else {
2011-07-13 15:24:33 -04:00
DELETE_OBJECT ( trayIconMessages ) ;
DELETE_OBJECT ( trayActionMessages ) ;
2010-11-25 19:54:18 -05:00
}
if ( notifyFlag & TRAYNOTIFY_FORUMS ) {
2011-07-13 15:24:33 -04:00
if ( notifyFlag & TRAYNOTIFY_FORUMS_COMBINED ) {
DELETE_OBJECT ( trayIconForums ) ;
2010-11-25 19:54:18 -05:00
2011-07-13 15:24:33 -04:00
trayActionForums = notifyMenu - > addAction ( QIcon ( " :/images/konversation16.png " ) , " " , this , SLOT ( trayIconForumsClicked ( ) ) ) ;
2010-11-25 19:54:18 -05:00
trayActionForums - > setVisible ( false ) ;
2011-07-13 15:24:33 -04:00
// trayActionForums->setData(tr("Forums"));
2010-11-25 19:54:18 -05:00
} else if ( trayIconForums = = NULL ) {
// Create the tray icon for forums
trayIconForums = new QSystemTrayIcon ( this ) ;
trayIconForums - > setIcon ( QIcon ( " :/images/konversation16.png " ) ) ;
connect ( trayIconForums , SIGNAL ( activated ( QSystemTrayIcon : : ActivationReason ) ) , this , SLOT ( trayIconForumsClicked ( QSystemTrayIcon : : ActivationReason ) ) ) ;
}
} else {
2011-07-13 15:24:33 -04:00
DELETE_OBJECT ( trayIconForums ) ;
DELETE_OBJECT ( trayActionForums ) ;
2010-11-25 19:54:18 -05:00
}
if ( notifyFlag & TRAYNOTIFY_CHANNELS ) {
2011-07-13 15:24:33 -04:00
if ( notifyFlag & TRAYNOTIFY_CHANNELS_COMBINED ) {
DELETE_OBJECT ( trayIconChannels ) ;
2010-11-25 19:54:18 -05:00
2011-07-13 15:24:33 -04:00
trayActionChannels = notifyMenu - > addAction ( QIcon ( " :/images/channels16.png " ) , " " , this , SLOT ( trayIconChannelsClicked ( ) ) ) ;
2010-11-25 19:54:18 -05:00
trayActionChannels - > setVisible ( false ) ;
2011-07-13 15:24:33 -04:00
// trayActionChannels->setData(tr("Channels"));
2010-11-25 19:54:18 -05:00
} else if ( trayIconChannels = = NULL ) {
// Create the tray icon for channels
trayIconChannels = new QSystemTrayIcon ( this ) ;
trayIconChannels - > setIcon ( QIcon ( " :/images/channels16.png " ) ) ;
connect ( trayIconChannels , SIGNAL ( activated ( QSystemTrayIcon : : ActivationReason ) ) , this , SLOT ( trayIconChannelsClicked ( QSystemTrayIcon : : ActivationReason ) ) ) ;
}
} else {
2011-07-13 15:24:33 -04:00
DELETE_OBJECT ( trayIconChannels ) ;
DELETE_OBJECT ( trayActionChannels ) ;
2010-11-25 19:54:18 -05:00
}
if ( notifyFlag & TRAYNOTIFY_PRIVATECHAT ) {
2011-07-13 15:24:33 -04:00
if ( notifyFlag & TRAYNOTIFY_PRIVATECHAT_COMBINED ) {
DELETE_OBJECT ( trayIconChat ) ;
2010-11-25 19:54:18 -05:00
2011-07-13 15:24:33 -04:00
trayActionChat = notifyMenu - > addAction ( QIcon ( " :/images/chat.png " ) , " " , this , SLOT ( trayIconChatClicked ( ) ) ) ;
2010-11-25 19:54:18 -05:00
trayActionChat - > setVisible ( false ) ;
2011-07-13 15:24:33 -04:00
// trayActionChat->setData(tr("Chat"));
2010-11-25 19:54:18 -05:00
} else if ( trayIconChat = = NULL ) {
// Create the tray icon for chat
trayIconChat = new QSystemTrayIcon ( this ) ;
trayIconChat - > setIcon ( QIcon ( " :/images/chat.png " ) ) ;
connect ( trayIconChat , SIGNAL ( activated ( QSystemTrayIcon : : ActivationReason ) ) , this , SLOT ( trayIconChatClicked ( QSystemTrayIcon : : ActivationReason ) ) ) ;
}
} else {
2011-07-13 15:24:33 -04:00
DELETE_OBJECT ( trayIconChat ) ;
DELETE_OBJECT ( trayActionChat ) ;
2010-11-25 19:54:18 -05:00
}
if ( notifyFlag & TRAYNOTIFY_TRANSFERS ) {
2011-07-13 15:24:33 -04:00
if ( notifyFlag & TRAYNOTIFY_TRANSFERS_COMBINED ) {
DELETE_OBJECT ( trayIconTransfers ) ;
2010-11-25 19:54:18 -05:00
2011-07-13 15:24:33 -04:00
trayActionTransfers = notifyMenu - > addAction ( QIcon ( " :/images/ktorrent32.png " ) , " " , this , SLOT ( trayIconTransfersClicked ( ) ) ) ;
2010-11-25 19:54:18 -05:00
trayActionTransfers - > setVisible ( false ) ;
2011-07-13 15:24:33 -04:00
// trayActionTransfers->setData(tr("Transfers"));
2010-11-25 19:54:18 -05:00
} else if ( trayIconTransfers = = NULL ) {
// Create the tray icon for transfers
trayIconTransfers = new QSystemTrayIcon ( this ) ;
trayIconTransfers - > setIcon ( QIcon ( " :/images/ktorrent32.png " ) ) ;
connect ( trayIconTransfers , SIGNAL ( activated ( QSystemTrayIcon : : ActivationReason ) ) , this , SLOT ( trayIconTransfersClicked ( QSystemTrayIcon : : ActivationReason ) ) ) ;
}
} else {
2011-07-13 15:24:33 -04:00
DELETE_OBJECT ( trayIconTransfers ) ;
DELETE_OBJECT ( trayActionTransfers ) ;
2010-11-25 19:54:18 -05:00
}
/* call once */
updateMessages ( ) ;
updateForums ( ) ;
updateChannels ( NOTIFY_TYPE_ADD ) ;
privateChatChanged ( NOTIFY_LIST_PRIVATE_INCOMING_CHAT , NOTIFY_TYPE_ADD ) ;
// transfer
2011-07-13 15:24:33 -04:00
# undef DELETE_OBJECT
2009-10-04 11:17:06 -04:00
}
2010-06-15 12:51:48 -04:00
/*static*/ void MainWindow : : installGroupChatNotifier ( )
{
if ( _instance = = NULL ) {
// nothing to do
return ;
}
if ( Settings - > getDisplayTrayGroupChat ( ) ) {
2011-05-17 13:27:47 -04:00
QObject : : connect ( _instance - > friendsDialog , SIGNAL ( notifyGroupChat ( const QString & , const QString & ) ) , _instance , SLOT ( displaySystrayMsg ( const QString & , const QString & ) ) , Qt : : QueuedConnection ) ;
2010-06-15 12:51:48 -04:00
} else {
2011-05-17 13:27:47 -04:00
QObject : : disconnect ( _instance - > friendsDialog , SIGNAL ( notifyGroupChat ( const QString & , const QString & ) ) , _instance , SLOT ( displaySystrayMsg ( const QString & , const QString & ) ) ) ;
2010-06-15 12:51:48 -04:00
}
}
2010-11-25 19:54:18 -05:00
/*static*/ void MainWindow : : installNotifyIcons ( )
{
if ( _instance = = NULL ) {
// nothing to do
return ;
}
_instance - > createNotifyIcons ( ) ;
}
2009-07-13 10:01:49 -04:00
void MainWindow : : displaySystrayMsg ( const QString & title , const QString & msg )
{
2010-01-01 08:45:35 -05:00
trayIcon - > showMessage ( title , msg , QSystemTrayIcon : : Information , 3000 ) ;
2009-07-13 10:01:49 -04:00
}
2010-08-09 08:16:21 -04:00
void MainWindow : : updateMessages ( )
2008-06-09 20:48:18 -04:00
{
2010-08-09 08:16:21 -04:00
unsigned int newInboxCount = 0 ;
rsMsgs - > getMessageCount ( NULL , & newInboxCount , NULL , NULL , NULL , NULL ) ;
2009-08-09 10:39:47 -04:00
2010-08-09 08:16:21 -04:00
if ( newInboxCount ) {
messageAction - > setIcon ( QIcon ( QPixmap ( " :/images/messages_new.png " ) ) ) ;
} else {
messageAction - > setIcon ( QIcon ( QPixmap ( " :/images/evolution.png " ) ) ) ;
}
2010-07-06 17:17:41 -04:00
2010-11-25 19:54:18 -05:00
if ( trayIconMessages ) {
if ( newInboxCount ) {
if ( newInboxCount > 1 ) {
trayIconMessages - > setToolTip ( " RetroShare \n " + tr ( " You have %1 new messages " ) . arg ( newInboxCount ) ) ;
} else {
trayIconMessages - > setToolTip ( " RetroShare \n " + tr ( " You have %1 new message " ) . arg ( newInboxCount ) ) ;
}
trayIconMessages - > show ( ) ;
2010-08-09 08:16:21 -04:00
} else {
2010-11-25 19:54:18 -05:00
trayIconMessages - > hide ( ) ;
2010-08-09 08:16:21 -04:00
}
}
2010-11-25 19:54:18 -05:00
if ( trayActionMessages ) {
2011-07-13 15:24:33 -04:00
trayActionMessages - > setData ( newInboxCount ) ;
2010-11-25 19:54:18 -05:00
if ( newInboxCount ) {
if ( newInboxCount > 1 ) {
trayActionMessages - > setText ( tr ( " %1 new messages " ) . arg ( newInboxCount ) ) ;
} else {
trayActionMessages - > setText ( tr ( " %1 new message " ) . arg ( newInboxCount ) ) ;
}
trayActionMessages - > setVisible ( true ) ;
} else {
trayActionMessages - > setVisible ( false ) ;
}
}
updateTrayCombine ( ) ;
2010-08-09 08:16:21 -04:00
}
2009-08-09 10:39:47 -04:00
2010-08-09 17:20:34 -04:00
void MainWindow : : updateForums ( )
{
unsigned int newMessageCount = 0 ;
unsigned int unreadMessageCount = 0 ;
rsForums - > getMessageCount ( " " , newMessageCount , unreadMessageCount ) ;
if ( newMessageCount ) {
2010-10-06 20:17:42 -04:00
forumAction - > setIcon ( QIcon ( " :/images/konversation_new.png " ) ) ;
2010-08-09 17:20:34 -04:00
} else {
2010-10-06 20:17:42 -04:00
forumAction - > setIcon ( QIcon ( IMAGE_FORUMS ) ) ;
2010-08-09 17:20:34 -04:00
}
2010-11-25 19:54:18 -05:00
if ( trayIconForums ) {
if ( newMessageCount ) {
if ( newMessageCount > 1 ) {
trayIconForums - > setToolTip ( " RetroShare \n " + tr ( " You have %1 new messages " ) . arg ( newMessageCount ) ) ;
} else {
trayIconForums - > setToolTip ( " RetroShare \n " + tr ( " You have %1 new message " ) . arg ( newMessageCount ) ) ;
}
trayIconForums - > show ( ) ;
2010-08-09 17:20:34 -04:00
} else {
2010-11-25 19:54:18 -05:00
trayIconForums - > hide ( ) ;
}
}
if ( trayActionForums ) {
2011-07-13 15:24:33 -04:00
trayActionForums - > setData ( newMessageCount ) ;
2010-11-25 19:54:18 -05:00
if ( newMessageCount ) {
if ( newMessageCount > 1 ) {
trayActionForums - > setText ( tr ( " %1 new messages " ) . arg ( newMessageCount ) ) ;
} else {
trayActionForums - > setText ( tr ( " %1 new message " ) . arg ( newMessageCount ) ) ;
}
trayActionForums - > setVisible ( true ) ;
} else {
trayActionForums - > setVisible ( false ) ;
2010-08-09 17:20:34 -04:00
}
}
2010-11-25 19:54:18 -05:00
updateTrayCombine ( ) ;
2010-08-09 17:20:34 -04:00
}
2010-10-06 20:17:42 -04:00
void MainWindow : : updateChannels ( int type )
{
unsigned int newMessageCount = 0 ;
unsigned int unreadMessageCount = 0 ;
rsChannels - > getMessageCount ( " " , newMessageCount , unreadMessageCount ) ;
if ( newMessageCount ) {
channelAction - > setIcon ( QIcon ( " :/images/channels_new32.png " ) ) ;
} else {
channelAction - > setIcon ( QIcon ( IMAGE_CHANNELS ) ) ;
}
2010-11-25 19:54:18 -05:00
if ( trayIconChannels ) {
if ( newMessageCount ) {
if ( newMessageCount > 1 ) {
trayIconChannels - > setToolTip ( " RetroShare \n " + tr ( " You have %1 new messages " ) . arg ( newMessageCount ) ) ;
} else {
trayIconChannels - > setToolTip ( " RetroShare \n " + tr ( " You have %1 new message " ) . arg ( newMessageCount ) ) ;
}
trayIconChannels - > show ( ) ;
2010-10-06 20:17:42 -04:00
} else {
2010-11-25 19:54:18 -05:00
trayIconChannels - > hide ( ) ;
}
}
if ( trayActionChannels ) {
2011-07-13 15:24:33 -04:00
trayActionChannels - > setData ( newMessageCount ) ;
2010-11-25 19:54:18 -05:00
if ( newMessageCount ) {
if ( newMessageCount > 1 ) {
trayActionChannels - > setText ( tr ( " %1 new messages " ) . arg ( newMessageCount ) ) ;
} else {
trayActionChannels - > setText ( tr ( " %1 new message " ) . arg ( newMessageCount ) ) ;
}
trayActionChannels - > setVisible ( true ) ;
} else {
trayActionChannels - > setVisible ( false ) ;
2010-10-06 20:17:42 -04:00
}
}
2010-11-25 19:54:18 -05:00
updateTrayCombine ( ) ;
2010-10-06 20:17:42 -04:00
}
2010-11-24 19:20:25 -05:00
void MainWindow : : updateTransfers ( int count )
{
if ( count ) {
transferAction - > setIcon ( QIcon ( " :/images/transfers_new32.png " ) ) ;
} else {
transferAction - > setIcon ( QIcon ( IMAGE_TRANSFERS ) ) ;
}
2010-11-25 19:54:18 -05:00
if ( trayIconTransfers ) {
if ( count ) {
if ( count > 1 ) {
trayIconTransfers - > setToolTip ( " RetroShare \n " + tr ( " You have %1 completed downloads " ) . arg ( count ) ) ;
} else {
trayIconTransfers - > setToolTip ( " RetroShare \n " + tr ( " You have %1 completed download " ) . arg ( count ) ) ;
}
trayIconTransfers - > show ( ) ;
2010-11-24 19:20:25 -05:00
} else {
2010-11-25 19:54:18 -05:00
trayIconTransfers - > hide ( ) ;
}
}
if ( trayActionTransfers ) {
2011-07-13 15:24:33 -04:00
trayActionTransfers - > setData ( count ) ;
2010-11-25 19:54:18 -05:00
if ( count ) {
if ( count > 1 ) {
trayActionTransfers - > setText ( tr ( " %1 completed downloads " ) . arg ( count ) ) ;
} else {
trayActionTransfers - > setText ( tr ( " %1 completed download " ) . arg ( count ) ) ;
}
trayActionTransfers - > setVisible ( true ) ;
} else {
trayActionTransfers - > setVisible ( false ) ;
2010-11-24 19:20:25 -05:00
}
2010-11-25 19:54:18 -05:00
}
updateTrayCombine ( ) ;
}
void MainWindow : : updateTrayCombine ( )
{
2011-07-13 15:24:33 -04:00
notifyToolTip . clear ( ) ;
2010-11-25 19:54:18 -05:00
2011-07-13 15:24:33 -04:00
bool visible = false ;
2010-11-25 19:54:18 -05:00
2011-07-13 15:24:33 -04:00
if ( notifyMenu ) {
QList < QAction * > actions = notifyMenu - > actions ( ) ;
int count = 0 ;
2010-11-25 19:54:18 -05:00
QList < QAction * > : : iterator actionIt ;
for ( actionIt = actions . begin ( ) ; actionIt ! = actions . end ( ) ; actionIt + + ) {
if ( ( * actionIt ) - > isVisible ( ) ) {
visible = true ;
2011-07-13 15:24:33 -04:00
count + = ( * actionIt ) - > data ( ) . toInt ( ) ;
// ToolTip is too long to show all services
// if (notifyToolTip.isEmpty() == false) {
// notifyToolTip += "\r";
// }
// notifyToolTip += (*actionIt)->data().toString() + ":" + (*actionIt)->text();
}
if ( visible ) {
notifyToolTip = ( ( count = = 1 ) ? tr ( " %1 new message " ) : tr ( " %1 new messages " ) ) . arg ( count ) ;
2010-11-25 19:54:18 -05:00
}
2011-07-13 15:24:33 -04:00
}
2010-11-24 19:20:25 -05:00
}
2011-07-13 15:24:33 -04:00
notifyMenu - > menuAction ( ) - > setVisible ( visible ) ;
2010-11-24 19:20:25 -05:00
}
2010-08-09 08:16:21 -04:00
void MainWindow : : updateStatus ( )
{
// This call is essential to remove locks due to QEventLoop re-entrance while asking gpg passwds. Dont' remove it!
if ( RsAutoUpdatePage : : eventsLocked ( ) )
return ;
2009-08-09 10:39:47 -04:00
2010-08-09 08:16:21 -04:00
unsigned int nFriendCount = 0 ;
unsigned int nOnlineCount = 0 ;
2010-10-08 08:03:25 -04:00
rsPeers - > getPeerCount ( & nFriendCount , & nOnlineCount , false ) ;
2010-10-27 17:29:48 -04:00
float downKb = 0 ;
float upKb = 0 ;
rsicontrol - > ConfigGetDataRates ( downKb , upKb ) ;
2009-08-09 10:39:47 -04:00
2010-08-09 08:16:21 -04:00
if ( ratesstatus )
2010-10-28 06:41:19 -04:00
ratesstatus - > getRatesStatus ( downKb , upKb ) ;
2010-02-27 12:47:52 -05:00
2010-08-09 08:16:21 -04:00
if ( peerstatus )
peerstatus - > getPeerStatus ( nFriendCount , nOnlineCount ) ;
2010-02-27 12:47:52 -05:00
2010-08-09 08:16:21 -04:00
if ( natstatus )
natstatus - > getNATStatus ( ) ;
2010-10-27 08:49:46 -04:00
if ( dhtstatus )
dhtstatus - > getDHTStatus ( ) ;
2010-08-09 08:16:21 -04:00
2011-01-07 11:56:57 -05:00
if ( discstatus ) {
discstatus - > update ( ) ;
}
2011-07-13 15:24:33 -04:00
QString trayIconResource ;
2010-08-09 08:16:21 -04:00
if ( nOnlineCount = = 0 )
{
2011-07-13 15:24:33 -04:00
trayIconResource = IMAGE_NOONLINE ;
2010-08-09 08:16:21 -04:00
}
else if ( nOnlineCount < 2 )
{
2011-07-13 15:24:33 -04:00
trayIconResource = IMAGE_ONEONLINE ;
2010-08-09 08:16:21 -04:00
}
else if ( nOnlineCount < 3 )
{
2011-07-13 15:24:33 -04:00
trayIconResource = IMAGE_TWOONLINE ;
2010-08-09 08:16:21 -04:00
}
else
{
2011-07-13 15:24:33 -04:00
trayIconResource = IMAGE_RETROSHARE ;
}
QIcon icon ;
if ( notifyMenu & & notifyMenu - > menuAction ( ) - > isVisible ( ) ) {
QPixmap trayImage ( trayIconResource ) ;
QPixmap overlayImage ( " :/images/rstray_star.png " ) ;
QPainter painter ( & trayImage ) ;
painter . drawPixmap ( 0 , 0 , overlayImage ) ;
icon . addPixmap ( trayImage ) ;
} else {
icon = QIcon ( trayIconResource ) ;
2010-08-09 08:16:21 -04:00
}
2010-10-27 17:29:48 -04:00
2011-07-13 15:24:33 -04:00
trayIcon - > setIcon ( icon ) ;
2010-11-25 19:54:18 -05:00
QString tray = " RetroShare \n " + tr ( " Down: %1 (kB/s) " ) . arg ( downKb , 0 , ' f ' , 2 ) + " | " + tr ( " Up: %1 (kB/s) " ) . arg ( upKb , 0 , ' f ' , 2 ) + " \n " ;
2010-10-28 06:12:56 -04:00
if ( nOnlineCount = = 1 ) {
tray + = tr ( " %1 friend connected " ) . arg ( nOnlineCount ) ;
2010-10-27 17:29:48 -04:00
} else {
2010-10-28 06:12:56 -04:00
tray + = tr ( " %1 friends connected " ) . arg ( nOnlineCount ) ;
2010-10-27 17:29:48 -04:00
}
2011-05-01 19:30:45 -04:00
tray + = " \n " + nameAndLocation ;
2010-10-28 06:12:56 -04:00
2011-07-13 15:24:33 -04:00
if ( ! notifyToolTip . isEmpty ( ) ) {
tray + = " \n " ;
tray + = notifyToolTip ;
}
2010-10-28 06:12:56 -04:00
trayIcon - > setToolTip ( tray ) ;
2008-06-15 11:34:56 -04:00
}
2010-09-20 20:08:06 -04:00
void MainWindow : : privateChatChanged ( int list , int type )
2010-09-01 13:56:15 -04:00
{
/* first process the chat messages */
2010-09-20 20:08:06 -04:00
PopupChatDialog : : privateChatChanged ( list , type ) ;
2010-09-01 13:56:15 -04:00
2010-09-20 20:08:06 -04:00
if ( list = = NOTIFY_LIST_PRIVATE_INCOMING_CHAT ) {
/* than count the chat messages */
int chatCount = rsMsgs - > getPrivateChatQueueCount ( true ) ;
2010-09-01 13:56:15 -04:00
2010-11-25 19:54:18 -05:00
if ( trayIconChat ) {
if ( chatCount ) {
if ( chatCount > 1 ) {
trayIconChat - > setToolTip ( " RetroShare \n " + tr ( " You have %1 new messages " ) . arg ( chatCount ) ) ;
} else {
trayIconChat - > setToolTip ( " RetroShare \n " + tr ( " You have %1 new message " ) . arg ( chatCount ) ) ;
}
trayIconChat - > show ( ) ;
} else {
trayIconChat - > hide ( ) ;
}
}
if ( trayActionChat ) {
2011-07-13 15:24:33 -04:00
trayActionChat - > setData ( chatCount ) ;
2010-11-25 19:54:18 -05:00
if ( chatCount ) {
if ( chatCount > 1 ) {
trayActionChat - > setText ( tr ( " %1 new messages " ) . arg ( chatCount ) ) ;
} else {
trayActionChat - > setText ( tr ( " %1 new message " ) . arg ( chatCount ) ) ;
}
trayActionChat - > setVisible ( true ) ;
} else {
trayActionChat - > setVisible ( false ) ; ;
}
2010-09-20 20:08:06 -04:00
}
2010-11-25 19:54:18 -05:00
updateTrayCombine ( ) ;
2010-09-01 13:56:15 -04:00
}
}
2010-04-24 18:09:47 -04:00
void MainWindow : : postModDirectories ( bool update_local )
{
RSettingsWin : : postModDirectories ( update_local ) ;
ShareManager : : postModDirectories ( update_local ) ;
QCoreApplication : : flush ( ) ;
}
2007-11-14 22:18:48 -05:00
/** Creates a new action associated with a config page. */
QAction * MainWindow : : createPageAction ( QIcon img , QString text , QActionGroup * group )
{
QAction * action = new QAction ( img , text , group ) ;
action - > setCheckable ( true ) ;
action - > setFont ( FONT ) ;
return action ;
}
/** Adds the given action to the toolbar and hooks its triggered() signal to
* the specified slot ( if given ) . */
void MainWindow : : addAction ( QAction * action , const char * slot )
{
action - > setFont ( FONT ) ;
ui . toolBar - > addAction ( action ) ;
connect ( action , SIGNAL ( triggered ( ) ) , this , slot ) ;
}
2009-01-07 16:12:31 -05:00
/** Shows the MainWindow with focus set to the given page. */
2010-05-23 17:32:58 -04:00
/*static*/ void MainWindow : : showWindow ( Page page )
2007-11-14 22:18:48 -05:00
{
2010-05-23 17:32:58 -04:00
if ( _instance = = NULL ) {
return ;
}
2007-11-14 22:18:48 -05:00
2009-01-07 16:12:31 -05:00
/* Show the dialog. */
2010-05-23 17:32:58 -04:00
_instance - > show ( ) ;
2007-11-14 22:18:48 -05:00
/* Set the focus to the specified page. */
2010-05-02 20:09:55 -04:00
activatePage ( page ) ;
2007-11-14 22:18:48 -05:00
}
2010-05-02 20:09:55 -04:00
/** Set focus to the given page. */
2010-11-04 07:14:47 -04:00
/*static*/ bool MainWindow : : activatePage ( Page page )
2010-05-02 20:09:55 -04:00
{
if ( _instance = = NULL ) {
2010-11-04 07:14:47 -04:00
return false ;
2010-05-02 20:09:55 -04:00
}
MainPage * Page = NULL ;
switch ( page ) {
case Network :
Page = _instance - > networkDialog ;
break ;
case Friends :
2011-05-17 13:27:47 -04:00
Page = _instance - > friendsDialog ;
2010-05-02 20:09:55 -04:00
break ;
case Search :
Page = _instance - > searchDialog ;
break ;
case Transfers :
Page = _instance - > transfersDialog ;
break ;
case SharedDirectories :
Page = _instance - > sharedfilesDialog ;
break ;
case Messages :
Page = _instance - > messagesDialog ;
break ;
case Channels :
Page = _instance - > channelFeed ;
break ;
case Forums :
Page = _instance - > forumsDialog ;
break ;
# ifdef BLOGS
case Blogs :
Page = _instance - > blogsFeed ;
break ;
# endif
}
if ( Page ) {
/* Set the focus to the specified page. */
_instance - > ui . stackPages - > setCurrentPage ( Page ) ;
2010-11-04 07:14:47 -04:00
return true ;
2010-05-02 20:09:55 -04:00
}
2010-11-04 07:14:47 -04:00
return false ;
}
/** Get the active page. */
/*static*/ MainWindow : : Page MainWindow : : getActivatePage ( )
{
if ( _instance = = NULL ) {
return Network ;
}
QWidget * page = _instance - > ui . stackPages - > currentWidget ( ) ;
if ( page = = _instance - > networkDialog ) {
return Network ;
}
2011-05-17 13:27:47 -04:00
if ( page = = _instance - > friendsDialog ) {
2010-11-04 07:14:47 -04:00
return Friends ;
}
if ( page = = _instance - > searchDialog ) {
return Search ;
}
if ( page = = _instance - > transfersDialog ) {
return Transfers ;
}
if ( page = = _instance - > sharedfilesDialog ) {
return SharedDirectories ;
}
if ( page = = _instance - > messagesDialog ) {
return Messages ;
}
2010-11-20 15:58:35 -05:00
# ifdef RS_USE_LINKS
2010-11-04 07:14:47 -04:00
if ( page = = _instance - > linksDialog ) {
return Links ;
}
2010-12-26 19:09:14 -05:00
# endif
2010-11-04 07:14:47 -04:00
if ( page = = _instance - > channelFeed ) {
return Channels ;
}
if ( page = = _instance - > forumsDialog ) {
return Forums ;
}
# ifdef BLOGS
if ( page = = _instance - > blogsFeed ) {
return Blogs ;
}
# endif
return Network ;
2010-05-02 20:09:55 -04:00
}
2007-11-14 22:18:48 -05:00
2010-05-27 15:48:52 -04:00
/** get page */
/*static*/ MainPage * MainWindow : : getPage ( Page page )
{
if ( _instance = = NULL ) {
return NULL ;
}
switch ( page ) {
case Network :
return _instance - > networkDialog ;
case Friends :
2011-05-17 13:27:47 -04:00
return _instance - > friendsDialog ;
2010-05-27 15:48:52 -04:00
case Search :
return _instance - > searchDialog ;
case Transfers :
return _instance - > transfersDialog ;
case SharedDirectories :
return _instance - > sharedfilesDialog ;
case Messages :
return _instance - > messagesDialog ;
2010-11-20 15:58:35 -05:00
# ifdef RS_USE_LINKS
2010-05-27 15:48:52 -04:00
case Links :
return _instance - > linksDialog ;
2010-11-17 18:53:58 -05:00
# endif
2010-05-27 15:48:52 -04:00
case Channels :
return _instance - > channelFeed ;
case Forums :
return _instance - > forumsDialog ;
# ifdef BLOGS
case Blogs :
return _instance - > blogsFeed ;
# endif
}
return NULL ;
}
2007-11-14 22:18:48 -05:00
/***** TOOL BAR FUNCTIONS *****/
/** Add a Friend ShortCut */
void MainWindow : : addFriend ( )
{
2010-05-02 20:09:55 -04:00
ConnectFriendWizard connwiz ( this ) ;
2007-11-14 22:18:48 -05:00
2010-05-02 20:09:55 -04:00
connwiz . exec ( ) ;
2007-11-14 22:18:48 -05:00
}
2009-01-07 16:12:31 -05:00
/** Shows Share Manager */
2008-12-10 20:19:34 -05:00
void MainWindow : : openShareManager ( )
{
2010-04-24 18:09:47 -04:00
ShareManager : : showYourself ( ) ;
2008-12-10 20:19:34 -05:00
}
2009-01-07 16:12:31 -05:00
/** Shows Messages Dialog */
void
2010-05-02 20:09:55 -04:00
MainWindow : : showMess ( )
2009-01-07 16:12:31 -05:00
{
2010-05-02 20:09:55 -04:00
showWindow ( MainWindow : : Messages ) ;
2009-01-07 16:12:31 -05:00
}
2007-11-14 22:18:48 -05:00
/** Shows Options */
2009-07-23 13:11:51 -04:00
void MainWindow : : showSettings ( )
{
2010-04-24 18:09:47 -04:00
RSettingsWin : : showYourself ( this ) ;
2009-07-23 13:11:51 -04:00
}
2007-11-14 22:18:48 -05:00
/** Shows Messenger window */
void MainWindow : : showMessengerWindow ( )
{
2010-07-18 07:43:39 -04:00
MessengerWindow : : showYourself ( ) ;
2007-11-14 22:18:48 -05:00
}
2011-07-06 09:08:27 -04:00
/** Shows Dht window */
void MainWindow : : showDhtWindow ( )
{
# ifdef USE_DHTWINDOW
DhtWindow : : showYourself ( ) ;
# endif
}
2007-11-14 22:18:48 -05:00
/** Shows Application window */
2009-12-05 08:42:24 -05:00
# ifdef UNFINISHED
2007-11-14 22:18:48 -05:00
void MainWindow : : showApplWindow ( )
{
applicationWindow - > show ( ) ;
}
2009-12-05 08:42:24 -05:00
# endif
2007-11-14 22:18:48 -05:00
2009-08-09 10:39:47 -04:00
/** If the user attempts to quit the app, a check-warning is issued. This warning can be
turned off for future quit events .
2007-11-14 22:18:48 -05:00
*/
void MainWindow : : doQuit ( )
2009-08-09 10:39:47 -04:00
{
2010-12-13 15:34:07 -05:00
if ( ! Settings - > value ( " doQuit " , false ) . toBool ( ) )
2009-08-09 21:40:17 -04:00
{
QString queryWrn ;
2009-04-02 16:28:12 -04:00
queryWrn . clear ( ) ;
2009-05-08 21:05:40 -04:00
queryWrn . append ( tr ( " Do you really want to exit RetroShare ? " ) ) ;
2009-04-02 16:28:12 -04:00
2009-07-23 13:11:51 -04:00
if ( ( QMessageBox : : question ( this , tr ( " Really quit ? " ) , queryWrn , QMessageBox : : Yes | QMessageBox : : No , QMessageBox : : Yes ) ) = = QMessageBox : : Yes )
2009-04-02 16:28:12 -04:00
{
2009-08-09 10:39:47 -04:00
qApp - > quit ( ) ;
2009-04-02 16:28:12 -04:00
}
else
2010-05-29 11:14:25 -04:00
return ;
2009-08-09 21:40:17 -04:00
}
2010-05-29 11:14:25 -04:00
2009-12-30 21:23:02 -05:00
rApp - > quit ( ) ;
2007-11-14 22:18:48 -05:00
}
2010-02-07 13:10:12 -05:00
void MainWindow : : displayErrorMessage ( int a , int b , const QString & error_msg )
{
QMessageBox : : critical ( NULL , tr ( " Internal Error " ) , error_msg ) ;
}
2007-11-14 22:18:48 -05:00
void MainWindow : : closeEvent ( QCloseEvent * e )
{
static bool firstTime = true ;
2010-12-13 15:34:07 -05:00
if ( ! Settings - > getCloseToTray ( ) )
2009-09-08 08:34:18 -04:00
{
if ( trayIcon - > isVisible ( ) ) {
if ( firstTime )
{
2007-11-14 22:18:48 -05:00
/*****
QMessageBox : : information ( this , tr ( " RetroShare System tray " ) ,
tr ( " Application will continue running. Quit using context menu in the system tray " ) ) ;
* * * * */
firstTime = false ;
2009-09-08 08:34:18 -04:00
}
hide ( ) ;
e - > ignore ( ) ;
}
}
else
{
rsicontrol - > rsGlobalShutDown ( ) ;
2009-12-30 21:23:02 -05:00
rApp - > quit ( ) ;
2009-09-08 08:34:18 -04:00
}
2007-11-14 22:18:48 -05:00
}
void MainWindow : : updateMenu ( )
{
toggleVisibilityAction - > setText ( isVisible ( ) ? tr ( " Hide " ) : tr ( " Show " ) ) ;
}
void MainWindow : : toggleVisibility ( QSystemTrayIcon : : ActivationReason e )
{
if ( e = = QSystemTrayIcon : : Trigger | | e = = QSystemTrayIcon : : DoubleClick ) {
if ( isHidden ( ) ) {
show ( ) ;
if ( isMinimized ( ) ) {
if ( isMaximized ( ) ) {
showMaximized ( ) ;
} else {
showNormal ( ) ;
}
}
raise ( ) ;
activateWindow ( ) ;
} else {
hide ( ) ;
}
}
}
2010-08-09 08:16:21 -04:00
void MainWindow : : trayIconMessagesClicked ( QSystemTrayIcon : : ActivationReason e )
{
if ( e = = QSystemTrayIcon : : Trigger | | e = = QSystemTrayIcon : : DoubleClick ) {
showMess ( ) ;
}
}
2010-08-09 17:20:34 -04:00
void MainWindow : : trayIconForumsClicked ( QSystemTrayIcon : : ActivationReason e )
{
if ( e = = QSystemTrayIcon : : Trigger | | e = = QSystemTrayIcon : : DoubleClick ) {
showWindow ( MainWindow : : Forums ) ;
}
}
2010-10-06 20:17:42 -04:00
void MainWindow : : trayIconChannelsClicked ( QSystemTrayIcon : : ActivationReason e )
{
if ( e = = QSystemTrayIcon : : Trigger | | e = = QSystemTrayIcon : : DoubleClick ) {
showWindow ( MainWindow : : Channels ) ;
}
}
2010-09-01 13:56:15 -04:00
void MainWindow : : trayIconChatClicked ( QSystemTrayIcon : : ActivationReason e )
{
if ( e = = QSystemTrayIcon : : Trigger | | e = = QSystemTrayIcon : : DoubleClick ) {
PopupChatDialog * pcd = NULL ;
std : : list < std : : string > ids ;
2010-09-20 20:08:06 -04:00
if ( rsMsgs - > getPrivateChatQueueIds ( true , ids ) & & ids . size ( ) ) {
2010-11-13 16:53:06 -05:00
pcd = PopupChatDialog : : getPrivateChat ( ids . front ( ) , RS_CHAT_OPEN | RS_CHAT_FOCUS ) ;
2010-09-01 13:56:15 -04:00
}
if ( pcd = = NULL ) {
showWindow ( MainWindow : : Friends ) ;
}
}
}
2010-11-24 19:20:25 -05:00
void MainWindow : : trayIconTransfersClicked ( QSystemTrayIcon : : ActivationReason e )
{
if ( e = = QSystemTrayIcon : : Trigger | | e = = QSystemTrayIcon : : DoubleClick ) {
showWindow ( MainWindow : : Transfers ) ;
}
}
2007-11-14 22:18:48 -05:00
void MainWindow : : toggleVisibilitycontextmenu ( )
{
if ( isVisible ( ) )
hide ( ) ;
else
show ( ) ;
}
void MainWindow : : loadStyleSheet ( const QString & sheetName )
{
2008-01-19 12:13:50 -05:00
/** internal Stylesheets **/
//QFile file(":/qss/" + sheetName.toLower() + ".qss");
2009-08-09 10:39:47 -04:00
2008-01-19 12:13:50 -05:00
/** extern Stylesheets **/
QFile file ( QApplication : : applicationDirPath ( ) + " /qss/ " + sheetName . toLower ( ) + " .qss " ) ;
2009-08-09 10:39:47 -04:00
2007-11-14 22:18:48 -05:00
file . open ( QFile : : ReadOnly ) ;
QString styleSheet = QLatin1String ( file . readAll ( ) ) ;
2009-08-09 10:39:47 -04:00
2007-11-14 22:18:48 -05:00
qApp - > setStyleSheet ( styleSheet ) ;
2009-08-09 10:39:47 -04:00
2007-11-14 22:18:48 -05:00
}
2008-03-31 09:00:00 -04:00
void MainWindow : : showabout ( )
{
2010-04-24 18:09:47 -04:00
AboutDialog adlg ( this ) ;
adlg . exec ( ) ;
2008-03-31 09:00:00 -04:00
}
2008-08-05 14:36:07 -04:00
/** Displays the help browser and displays the most recently viewed help
* topic . */
void MainWindow : : showHelpDialog ( )
{
showHelpDialog ( QString ( ) ) ;
}
/**< Shows the help browser and displays the given help <b>topic</b>. */
void MainWindow : : showHelpDialog ( const QString & topic )
{
static HelpBrowser * helpBrowser = 0 ;
if ( ! helpBrowser )
helpBrowser = new HelpBrowser ( this ) ;
helpBrowser - > showWindow ( topic ) ;
}
2010-01-08 08:00:00 -05:00
void MainWindow : : on_actionQuick_Start_Wizard_activated ( )
{
2010-04-24 18:09:47 -04:00
QuickStartWizard qstartwizard ( this ) ;
qstartwizard . exec ( ) ;
2010-01-08 08:00:00 -05:00
}
2009-12-30 21:23:02 -05:00
/** Called when the user changes the UI translation. */
void
MainWindow : : retranslateUi ( )
{
ui . retranslateUi ( this ) ;
foreach ( MainPage * page , ui . stackPages - > pages ( ) ) {
page - > retranslateUi ( ) ;
}
foreach ( QAction * action , ui . toolBar - > actions ( ) ) {
action - > setText ( tr ( qPrintable ( action - > data ( ) . toString ( ) ) , " MainWindow " ) ) ;
}
}
2008-11-27 18:59:08 -05:00
void MainWindow : : setStyle ( )
{
QString standardSheet = " {background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 <color1>, stop:1 <color2>);} " ;
QColor stop1 = QColorDialog : : getColor ( Qt : : white ) ;
QColor stop2 = QColorDialog : : getColor ( Qt : : black ) ;
//QString widgetSheet = ".QWidget" + standardSheet.replace("<color1>", stop1.name()).replace("<color2>", stop2.name());
QString toolSheet = " QToolBar " + standardSheet . replace ( " <color1> " , stop1 . name ( ) ) . replace ( " <color2> " , stop2 . name ( ) ) ;
QString menuSheet = " QMenuBar " + standardSheet . replace ( " <color1> " , stop1 . name ( ) ) . replace ( " <color2> " , stop2 . name ( ) ) ;
qApp - > setStyleSheet ( /*widgetSheet + */ toolSheet + menuSheet ) ;
2009-08-09 10:39:47 -04:00
2008-03-27 19:40:37 -04:00
}
2010-02-25 08:12:18 -05:00
2010-07-17 19:19:43 -04:00
/* set status object to status value */
static void setStatusObject ( QObject * pObject , int nStatus )
{
QMenu * pMenu = dynamic_cast < QMenu * > ( pObject ) ;
if ( pMenu ) {
/* set action in menu */
foreach ( QObject * pObject , pMenu - > children ( ) ) {
QAction * pAction = qobject_cast < QAction * > ( pObject ) ;
if ( pAction = = NULL ) {
continue ;
}
if ( pAction - > data ( ) . toInt ( ) = = nStatus ) {
pAction - > setChecked ( true ) ;
break ;
}
}
return ;
}
QComboBox * pComboBox = dynamic_cast < QComboBox * > ( pObject ) ;
if ( pComboBox ) {
/* set index of combobox */
int nIndex = pComboBox - > findData ( nStatus , Qt : : UserRole ) ;
if ( nIndex ! = - 1 ) {
pComboBox - > setCurrentIndex ( nIndex ) ;
}
return ;
}
/* add more objects here */
}
/** Load own status Online,Away,Busy **/
void MainWindow : : loadOwnStatus ( )
{
m_bStatusLoadDone = true ;
2010-07-20 15:45:07 -04:00
StatusInfo statusInfo ;
if ( rsStatus - > getOwnStatus ( statusInfo ) ) {
/* send status to all added objects */
for ( std : : set < QObject * > : : iterator it = m_apStatusObjects . begin ( ) ; it ! = m_apStatusObjects . end ( ) ; it + + ) {
setStatusObject ( * it , statusInfo . status ) ;
}
2010-07-17 19:19:43 -04:00
}
}
void MainWindow : : checkAndSetIdle ( int idleTime )
{
2010-07-21 03:39:14 -04:00
int maxTimeBeforeIdle = Settings - > getMaxTimeBeforeIdle ( ) ;
if ( ( idleTime > = maxTimeBeforeIdle ) & & ! isIdle ) {
2010-07-17 19:19:43 -04:00
setIdle ( true ) ;
2010-07-21 03:39:14 -04:00
} else if ( ( idleTime < maxTimeBeforeIdle ) & & isIdle ) {
2010-07-17 19:19:43 -04:00
setIdle ( false ) ;
}
2010-02-25 08:12:18 -05:00
2010-07-17 19:19:43 -04:00
return ;
}
void MainWindow : : setIdle ( bool idle )
{
isIdle = idle ;
2010-07-20 15:45:07 -04:00
StatusInfo statusInfo ;
if ( rsStatus - > getOwnStatus ( statusInfo ) ) {
setStatus ( NULL , statusInfo . status ) ;
}
2010-07-17 19:19:43 -04:00
}
/* add and initialize status object */
2010-07-20 15:45:07 -04:00
void MainWindow : : initializeStatusObject ( QObject * pObject , bool bConnect )
2010-07-17 19:19:43 -04:00
{
if ( m_apStatusObjects . find ( pObject ) ! = m_apStatusObjects . end ( ) ) {
2010-07-20 15:45:07 -04:00
/* already added */
2010-07-17 19:19:43 -04:00
return ;
}
m_apStatusObjects . insert ( m_apStatusObjects . end ( ) , pObject ) ;
2010-09-11 16:25:08 -04:00
std : : string statusString ;
2010-07-17 19:19:43 -04:00
QMenu * pMenu = dynamic_cast < QMenu * > ( pObject ) ;
if ( pMenu ) {
/* initialize menu */
QActionGroup * pGroup = new QActionGroup ( pMenu ) ;
2010-09-12 10:10:28 -04:00
QAction * pAction = new QAction ( QIcon ( StatusDefs : : imageIM ( RS_STATUS_ONLINE ) ) , StatusDefs : : name ( RS_STATUS_ONLINE ) , pMenu ) ;
2010-07-17 19:19:43 -04:00
pAction - > setData ( RS_STATUS_ONLINE ) ;
pAction - > setCheckable ( true ) ;
pMenu - > addAction ( pAction ) ;
pGroup - > addAction ( pAction ) ;
2010-09-12 10:10:28 -04:00
pAction = new QAction ( QIcon ( StatusDefs : : imageIM ( RS_STATUS_BUSY ) ) , StatusDefs : : name ( RS_STATUS_BUSY ) , pMenu ) ;
2010-07-17 19:19:43 -04:00
pAction - > setData ( RS_STATUS_BUSY ) ;
pAction - > setCheckable ( true ) ;
pMenu - > addAction ( pAction ) ;
pGroup - > addAction ( pAction ) ;
2010-09-12 10:10:28 -04:00
pAction = new QAction ( QIcon ( StatusDefs : : imageIM ( RS_STATUS_AWAY ) ) , StatusDefs : : name ( RS_STATUS_AWAY ) , pMenu ) ;
2010-07-17 19:19:43 -04:00
pAction - > setData ( RS_STATUS_AWAY ) ;
pAction - > setCheckable ( true ) ;
pMenu - > addAction ( pAction ) ;
pGroup - > addAction ( pAction ) ;
2010-07-20 15:45:07 -04:00
if ( bConnect ) {
connect ( pMenu , SIGNAL ( triggered ( QAction * ) ) , this , SLOT ( statusChangedMenu ( QAction * ) ) ) ;
}
2010-07-17 19:19:43 -04:00
} else {
/* initialize combobox */
QComboBox * pComboBox = dynamic_cast < QComboBox * > ( pObject ) ;
if ( pComboBox ) {
2010-09-12 10:10:28 -04:00
pComboBox - > addItem ( QIcon ( StatusDefs : : imageIM ( RS_STATUS_ONLINE ) ) , StatusDefs : : name ( RS_STATUS_ONLINE ) , RS_STATUS_ONLINE ) ;
pComboBox - > addItem ( QIcon ( StatusDefs : : imageIM ( RS_STATUS_BUSY ) ) , StatusDefs : : name ( RS_STATUS_BUSY ) , RS_STATUS_BUSY ) ;
pComboBox - > addItem ( QIcon ( StatusDefs : : imageIM ( RS_STATUS_AWAY ) ) , StatusDefs : : name ( RS_STATUS_AWAY ) , RS_STATUS_AWAY ) ;
2010-07-20 15:45:07 -04:00
if ( bConnect ) {
connect ( pComboBox , SIGNAL ( activated ( int ) ) , this , SLOT ( statusChangedComboBox ( int ) ) ) ;
}
2010-07-17 19:19:43 -04:00
}
/* add more objects here */
}
if ( m_bStatusLoadDone ) {
/* loadOwnStatus done, set own status directly */
2010-07-20 15:45:07 -04:00
StatusInfo statusInfo ;
if ( rsStatus - > getOwnStatus ( statusInfo ) ) {
setStatusObject ( pObject , statusInfo . status ) ;
2010-07-17 19:19:43 -04:00
}
}
}
/* remove status object */
void MainWindow : : removeStatusObject ( QObject * pObject )
{
m_apStatusObjects . erase ( pObject ) ;
2010-07-20 15:45:07 -04:00
/* disconnect all signals between the object and MainWindow */
disconnect ( pObject , NULL , this , NULL ) ;
2010-07-17 19:19:43 -04:00
}
/** Save own status Online,Away,Busy **/
void MainWindow : : setStatus ( QObject * pObject , int nStatus )
{
if ( isIdle & & nStatus = = ( int ) RS_STATUS_ONLINE ) {
2010-07-20 15:45:07 -04:00
/* set idle only when I am online */
2010-07-17 19:19:43 -04:00
nStatus = RS_STATUS_INACTIVE ;
}
2010-07-20 15:45:07 -04:00
rsStatus - > sendStatus ( " " , nStatus ) ;
2010-07-17 19:19:43 -04:00
/* set status in all status objects, but the calling one */
for ( std : : set < QObject * > : : iterator it = m_apStatusObjects . begin ( ) ; it ! = m_apStatusObjects . end ( ) ; it + + ) {
if ( * it ! = pObject ) {
setStatusObject ( * it , nStatus ) ;
}
}
}
/* new status from context menu */
2010-07-20 15:45:07 -04:00
void MainWindow : : statusChangedMenu ( QAction * pAction )
2010-07-17 19:19:43 -04:00
{
if ( pAction = = NULL ) {
return ;
}
setStatus ( pAction - > parent ( ) , pAction - > data ( ) . toInt ( ) ) ;
}
2010-07-18 17:28:56 -04:00
/* new status from combobox in statusbar */
void MainWindow : : statusChangedComboBox ( int index )
{
if ( index < 0 ) {
return ;
}
2010-07-20 15:45:07 -04:00
/* no object known */
setStatus ( NULL , statusComboBox - > itemData ( index , Qt : : UserRole ) . toInt ( ) ) ;
2010-07-18 17:28:56 -04:00
}
2010-11-17 20:18:31 -05:00
void MainWindow : : linkActivated ( const QUrl & url )
{
2010-11-18 11:31:44 -05:00
RetroShareLink link ( url ) ;
if ( link . valid ( ) = = false ) {
// QUrl can't handle the old RetroShare link format properly
if ( url . host ( ) . isEmpty ( ) ) {
QMessageBox mb ( " RetroShare " , tr ( " It seems to be an old RetroShare link. Please use copy instead. " ) , QMessageBox : : Critical , QMessageBox : : Ok , 0 , 0 ) ;
mb . setWindowIcon ( QIcon ( " :/images/rstray3.png " ) ) ;
mb . exec ( ) ;
return ;
}
QMessageBox mb ( " RetroShare " , tr ( " The file link is malformed. " ) , QMessageBox : : Critical , QMessageBox : : Ok , 0 , 0 ) ;
mb . setWindowIcon ( QIcon ( " :/images/rstray3.png " ) ) ;
mb . exec ( ) ;
return ;
}
link . process ( RSLINK_PROCESS_NOTIFY_ERROR | RSLINK_PROCESS_NOTIFY_SUCCESS ) ;
2010-11-17 20:18:31 -05:00
}