/*
This file is part of Akregator .
Copyright ( C ) 2004 Stanislav Karchebny < Stanislav . Karchebny @ kdemail . net >
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
Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
As a special exception , permission is given to link this program
with any edition of TQt , and distribute the resulting executable ,
without including the source code for TQt in the source distribution .
*/
# include "mainwindow.h"
# include "akregator_part.h"
# include "akregatorconfig.h"
//settings
# include <dcopclient.h>
# include <kaction.h>
# include <kapplication.h>
# include <tdeconfig.h>
# include <kdebug.h>
# include <kedittoolbar.h>
# include <tdefiledialog.h>
# include <kglobal.h>
# include <kkeydialog.h>
# include <klibloader.h>
# include <klocale.h>
# include <kmessagebox.h>
# include <tdeparts/partmanager.h>
# include <ksqueezedtextlabel.h>
# include <kstandarddirs.h>
# include <kstatusbar.h>
# include <kstdaction.h>
# include <kurl.h>
# include "progressdialog.h"
# include "statusbarprogresswidget.h"
# include "trayicon.h"
# include <tqmetaobject.h>
# include <tqpen.h>
# include <tqpainter.h>
# include <tqucomextra_p.h>
# include <tqtimer.h>
namespace Akregator {
BrowserInterface : : BrowserInterface ( MainWindow * shell , const char * name )
: KParts : : BrowserInterface ( TQT_TQOBJECT ( shell ) , name )
{
m_shell = shell ;
}
MainWindow : : MainWindow ( )
: KParts : : MainWindow ( 0L , " akregator_mainwindow " ) {
// set the shell's ui resource file
setXMLFile ( " akregator_shell.rc " ) ;
m_browserIface = new BrowserInterface ( this , " browser_interface " ) ;
m_part = 0 ;
// then, setup our actions
toolBar ( ) - > show ( ) ;
// and a status bar
statusBar ( ) - > show ( ) ;
int statH = fontMetrics ( ) . height ( ) + 2 ;
m_statusLabel = new KSqueezedTextLabel ( this ) ;
m_statusLabel - > setTextFormat ( TQt : : RichText ) ;
m_statusLabel - > setSizePolicy ( TQSizePolicy ( TQSizePolicy : : Ignored , TQSizePolicy : : Fixed ) ) ;
m_statusLabel - > setMinimumWidth ( 0 ) ;
m_statusLabel - > setFixedHeight ( statH ) ;
statusBar ( ) - > addWidget ( m_statusLabel , 1 , false ) ;
setupActions ( ) ;
createGUI ( 0L ) ;
}
bool MainWindow : : loadPart ( )
{
// this routine will find and load our Part. it finds the Part by
// name which is a bad idea usually.. but it's alright in this
// case since our Part is made for this Shell
KLibFactory * factory = KLibLoader : : self ( ) - > factory ( " libakregatorpart " ) ;
if ( factory )
{
// now that the Part is loaded, we cast it to a Part to get
// our hands on it
m_part = static_cast < Akregator : : Part * > ( factory - > create ( TQT_TQOBJECT ( this ) , " akregator_part " , " KParts::ReadOnlyPart " ) ) ;
if ( m_part )
{
// tell the KParts::MainWindow that this is indeed the main widget
setCentralWidget ( m_part - > widget ( ) ) ;
connect ( m_part , TQT_SIGNAL ( setWindowCaption ( const TQString & ) ) , this , TQT_SLOT ( setCaption ( const TQString & ) ) ) ;
connect ( TrayIcon : : getInstance ( ) , TQT_SIGNAL ( quitSelected ( ) ) , this , TQT_SLOT ( slotQuit ( ) ) ) ;
// and integrate the part's GUI with the shell's
connectActionCollection ( m_part - > actionCollection ( ) ) ;
createGUI ( m_part ) ;
browserExtension ( m_part ) - > setBrowserInterface ( m_browserIface ) ;
setAutoSaveSettings ( ) ;
return true ;
}
return false ;
}
else
{
KMessageBox : : error ( this , i18n ( " Could not find the Akregator part; please check your installation. " ) ) ;
return false ;
}
}
void MainWindow : : setupProgressWidgets ( )
{
KPIM : : ProgressDialog * progressDialog = new KPIM : : ProgressDialog ( statusBar ( ) , this ) ;
progressDialog - > raise ( ) ;
progressDialog - > hide ( ) ;
m_progressBar = new KPIM : : StatusbarProgressWidget ( progressDialog , statusBar ( ) ) ;
m_progressBar - > show ( ) ;
statusBar ( ) - > addWidget ( m_progressBar , 0 , true ) ;
}
MainWindow : : ~ MainWindow ( )
{
}
void MainWindow : : setCaption ( const TQString & a )
{
KParts : : MainWindow : : setCaption ( a ) ;
}
void MainWindow : : setupActions ( )
{
connectActionCollection ( actionCollection ( ) ) ;
KStdAction : : quit ( TQT_TQOBJECT ( kapp ) , TQT_SLOT ( quit ( ) ) , actionCollection ( ) ) ;
setStandardToolBarMenuEnabled ( true ) ;
createStandardStatusBarAction ( ) ;
KStdAction : : keyBindings ( TQT_TQOBJECT ( this ) , TQT_SLOT ( optionsConfigureKeys ( ) ) , actionCollection ( ) ) ;
KStdAction : : configureToolbars ( TQT_TQOBJECT ( this ) , TQT_SLOT ( optionsConfigureToolbars ( ) ) , actionCollection ( ) ) ;
}
void MainWindow : : saveProperties ( TDEConfig * config )
{
if ( ! m_part )
loadPart ( ) ;
static_cast < Akregator : : Part * > ( m_part ) - > saveProperties ( config ) ;
config - > writeEntry ( " docked " , isHidden ( ) ) ;
//delete m_part;
}
void MainWindow : : readProperties ( TDEConfig * config )
{
if ( ! m_part )
loadPart ( ) ;
static_cast < Akregator : : Part * > ( m_part ) - > readProperties ( config ) ;
if ( Settings : : showTrayIcon ( ) & & config - > readBoolEntry ( " docked " , false ) )
hide ( ) ;
else
show ( ) ;
}
void MainWindow : : optionsConfigureKeys ( )
{
KKeyDialog dlg ( true , this ) ;
dlg . insert ( actionCollection ( ) ) ;
if ( m_part )
dlg . insert ( m_part - > actionCollection ( ) ) ;
dlg . configure ( ) ;
}
void MainWindow : : optionsConfigureToolbars ( )
{
saveMainWindowSettings ( TDEGlobal : : config ( ) , autoSaveGroup ( ) ) ;
// use the standard toolbar editor
KEditToolbar dlg ( factory ( ) ) ;
connect ( & dlg , TQT_SIGNAL ( newToolbarConfig ( ) ) ,
this , TQT_SLOT ( applyNewToolbarConfig ( ) ) ) ;
dlg . exec ( ) ;
}
void MainWindow : : applyNewToolbarConfig ( )
{
applyMainWindowSettings ( TDEGlobal : : config ( ) , autoSaveGroup ( ) ) ;
}
KParts : : BrowserExtension * MainWindow : : browserExtension ( KParts : : ReadOnlyPart * p )
{
return KParts : : BrowserExtension : : childObject ( p ) ;
}
// from konqmainwindow
void MainWindow : : connectActionCollection ( KActionCollection * coll )
{
if ( ! coll ) return ;
connect ( coll , TQT_SIGNAL ( actionStatusText ( const TQString & ) ) ,
m_statusLabel , TQT_SLOT ( setText ( const TQString & ) ) ) ;
connect ( coll , TQT_SIGNAL ( clearStatusText ( ) ) ,
this , TQT_SLOT ( slotClearStatusText ( ) ) ) ;
}
bool MainWindow : : queryExit ( )
{
kdDebug ( ) < < " MainWindow::queryExit() " < < endl ;
if ( ! kapp - > sessionSaving ( ) )
{
delete m_part ; // delete that here instead of dtor to ensure nested tdehtmlparts are deleted before singleton objects like TDEHTMLPageCache
m_part = 0 ;
}
else
kdDebug ( " MainWindow::queryExit(): saving session " ) ;
return KMainWindow : : queryExit ( ) ;
}
void MainWindow : : slotQuit ( )
{
if ( TrayIcon : : getInstance ( ) )
TrayIcon : : getInstance ( ) - > hide ( ) ;
kapp - > quit ( ) ;
}
bool MainWindow : : queryClose ( )
{
if ( kapp - > sessionSaving ( ) | | TrayIcon : : getInstance ( ) = = 0 | | TrayIcon : : getInstance ( ) - > isHidden ( ) )
{
return true ;
}
else
{
TQPixmap shot = TrayIcon : : getInstance ( ) - > takeScreenshot ( ) ;
// Associate source to image and show the dialog:
TQMimeSourceFactory : : defaultFactory ( ) - > setPixmap ( " systray_shot " , shot ) ;
KMessageBox : : information ( this , i18n ( " <qt><p>Closing the main window will keep Akregator running in the system tray. Use 'Quit' from the 'File' menu to quit the application.</p><p><center><img source= \" systray_shot \" ></center></p></qt> " ) , i18n ( " TQt::Docking in System Tray " ) , " hideOnCloseInfo " ) ;
hide ( ) ;
return false ;
}
}
void MainWindow : : slotClearStatusText ( )
{
m_statusLabel - > setText ( TQString ( ) ) ;
}
void MainWindow : : slotSetStatusBarText ( const TQString & text )
{
m_statusLabel - > setText ( text ) ;
}
} // namespace Akregator
# include "mainwindow.moc"
// vim: set et ts=4 sts=4 sw=4: