/*
* This file is part of the KDE libraries
* Copyright ( c ) 2001 Michael Goffioul < kdeprint @ swing . be >
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Library General Public
* License version 2 as published by the Free Software Foundation .
*
* This library 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
* Library General Public License for more details .
*
* You should have received a copy of the GNU Library General Public License
* along with this library ; see the file COPYING . LIB . If not , write to
* the Free Software Foundation , Inc . , 51 Franklin Street , Fifth Floor ,
* Boston , MA 02110 - 1301 , USA .
* */
# include "kmmainview.h"
# include "kmtimer.h"
# include "kmprinterview.h"
# include "kmpages.h"
# include "kmmanager.h"
# include "kmuimanager.h"
# include "kmfactory.h"
# include "kmvirtualmanager.h"
# include "kmprinter.h"
# include "driver.h"
# include "kmdriverdialog.h"
# include "kmwizard.h"
# include "kmconfigdialog.h"
# include "kmspecialprinterdlg.h"
# include "plugincombobox.h"
# include "kiconselectaction.h"
# include "messagewindow.h"
# include <tqdockarea.h>
# include <kmenubar.h>
# include <tqtimer.h>
# include <tqcombobox.h>
# include <tqlabel.h>
# include <tqlayout.h>
# include <tqpopupmenu.h>
# include <kmessagebox.h>
# include <kaction.h>
# include <klocale.h>
# include <kconfig.h>
# include <ktoolbar.h>
# include <ktoolbarbutton.h>
# include <kdebug.h>
# include <kpopupmenu.h>
# include <klibloader.h>
# include <kdialogbase.h>
# include <ksimpleconfig.h>
# include <kstandarddirs.h>
# include <kapplication.h>
# include <kprocess.h>
# undef m_manager
# define m_manager KMFactory::self()->manager()
int kdeprint_management_add_printer_wizard ( TQWidget * parent )
{
KMWizard dlg ( parent ) ;
int flag ( 0 ) ;
if ( dlg . exec ( ) )
{
flag = 1 ;
// check if the printer already exists, and ask confirmation if needed.
if ( KMFactory : : self ( ) - > manager ( ) - > findPrinter ( dlg . printer ( ) - > name ( ) ) ! = 0 )
if ( KMessageBox : : warningContinueCancel ( parent , i18n ( " The printer %1 already exists. Continuing will overwrite existing printer. Do you want to continue? " ) . arg ( dlg . printer ( ) - > name ( ) ) ) = = KMessageBox : : Cancel )
flag = 0 ;
// try to add printer only if flag is true.
if ( flag & & ! KMFactory : : self ( ) - > manager ( ) - > createPrinter ( dlg . printer ( ) ) )
flag = - 1 ;
}
return flag ;
}
KMMainView : : KMMainView ( TQWidget * parent , const char * name , KActionCollection * coll )
: TQWidget ( parent , name )
{
m_current = 0 ;
m_first = true ;
// create widgets
m_printerview = new KMPrinterView ( this , " PrinterView " ) ;
m_printerpages = new KMPages ( this , " PrinterPages " ) ;
m_pop = new TQPopupMenu ( this ) ;
m_toolbar = new KToolBar ( this , " ToolBar " ) ;
m_toolbar - > setMovingEnabled ( false ) ;
m_plugin = new PluginComboBox ( this , " Plugin " ) ;
/*
m_menubar = new KMenuBar ( this ) ;
static_cast < KMenuBar * > ( m_menubar ) - > setTopLevelMenu ( false ) ;
*/
m_menubar = new KToolBar ( this , " MenuBar " , false , false ) ;
m_menubar - > setIconText ( KToolBar : : IconTextRight ) ;
m_menubar - > setMovingEnabled ( false ) ;
// layout
QVBoxLayout * m_layout = new TQVBoxLayout ( this , 0 , 0 ) ;
m_layout - > addWidget ( m_toolbar ) ;
m_layout - > addWidget ( m_menubar ) ;
m_boxlayout = new TQBoxLayout ( TQBoxLayout : : TopToBottom , 0 , 0 ) ;
m_layout - > addLayout ( m_boxlayout ) ;
m_boxlayout - > addWidget ( m_printerview ) ;
m_boxlayout - > addWidget ( m_printerpages ) ;
m_layout - > addSpacing ( 5 ) ;
m_layout - > addWidget ( m_plugin , 0 ) ;
// connections
connect ( KMTimer : : self ( ) , TQT_SIGNAL ( timeout ( ) ) , TQT_SLOT ( slotTimer ( ) ) ) ;
connect ( m_printerview , TQT_SIGNAL ( printerSelected ( const TQString & ) ) , TQT_SLOT ( slotPrinterSelected ( const TQString & ) ) ) ;
connect ( m_printerview , TQT_SIGNAL ( rightButtonClicked ( const TQString & , const TQPoint & ) ) , TQT_SLOT ( slotRightButtonClicked ( const TQString & , const TQPoint & ) ) ) ;
connect ( m_pop , TQT_SIGNAL ( aboutToShow ( ) ) , KMTimer : : self ( ) , TQT_SLOT ( hold ( ) ) ) ;
connect ( m_pop , TQT_SIGNAL ( aboutToHide ( ) ) , KMTimer : : self ( ) , TQT_SLOT ( release ( ) ) ) ;
connect ( m_manager , TQT_SIGNAL ( updatePossible ( bool ) ) , TQT_SLOT ( slotUpdatePossible ( bool ) ) ) ;
// actions
if ( coll )
m_actions = coll ;
else
m_actions = new KActionCollection ( this ) ;
initActions ( ) ;
// first update
restoreSettings ( ) ;
loadParameters ( ) ;
// delay first update until KMManager is ready
reset ( i18n ( " Initializing manager... " ) , true , true ) ;
}
KMMainView : : ~ KMMainView ( )
{
saveSettings ( ) ;
//KMFactory::release();
}
void KMMainView : : loadParameters ( )
{
}
void KMMainView : : restoreSettings ( )
{
KConfig * conf = KMFactory : : self ( ) - > printConfig ( ) ;
conf - > setGroup ( " General " ) ;
setViewType ( ( KMPrinterView : : ViewType ) conf - > readNumEntry ( " ViewType " , KMPrinterView : : Icons ) ) ;
setOrientation ( conf - > readNumEntry ( " Orientation " , Qt : : Vertical ) ) ;
bool view = conf - > readBoolEntry ( " ViewToolBar " , false ) ;
slotToggleToolBar ( view ) ;
( ( KToggleAction * ) m_actions - > action ( " view_toolbar " ) ) - > setChecked ( view ) ;
view = conf - > readBoolEntry ( " ViewMenuBar " , true ) ;
slotToggleMenuBar ( view ) ;
static_cast < KToggleAction * > ( m_actions - > action ( " view_menubar " ) ) - > setChecked ( view ) ;
view = conf - > readBoolEntry ( " ViewPrinterInfos " , true ) ;
slotShowPrinterInfos ( view ) ;
( ( KToggleAction * ) m_actions - > action ( " view_printerinfos " ) ) - > setChecked ( view ) ;
}
void KMMainView : : saveSettings ( )
{
KConfig * conf = KMFactory : : self ( ) - > printConfig ( ) ;
conf - > setGroup ( " General " ) ;
conf - > writeEntry ( " ViewType " , ( int ) m_printerview - > viewType ( ) ) ;
conf - > writeEntry ( " Orientation " , ( int ) orientation ( ) ) ;
conf - > writeEntry ( " ViewToolBar " , ( ( KToggleAction * ) m_actions - > action ( " view_toolbar " ) ) - > isChecked ( ) ) ;
conf - > writeEntry ( " ViewMenuBar " , static_cast < KToggleAction * > ( m_actions - > action ( " view_menubar " ) ) - > isChecked ( ) ) ;
conf - > writeEntry ( " ViewPrinterInfos " , ( ( KToggleAction * ) m_actions - > action ( " view_printerinfos " ) ) - > isChecked ( ) ) ;
conf - > sync ( ) ;
}
void KMMainView : : initActions ( )
{
KIconSelectAction * vact = new KIconSelectAction ( i18n ( " &View " ) , 0 , m_actions , " view_change " ) ;
QStringList iconlst ;
iconlst < < " view_icon " < < " view_detailed " < < " view_tree " ;
vact - > setItems ( TQStringList : : split ( ' , ' , i18n ( " &Icons,&List,&Tree " ) , false ) , iconlst ) ;
vact - > setCurrentItem ( 0 ) ;
connect ( vact , TQT_SIGNAL ( activated ( int ) ) , TQT_SLOT ( slotChangeView ( int ) ) ) ;
KActionMenu * stateAct = new KActionMenu ( i18n ( " Start/Stop Printer " ) , " kdeprint_printstate " , m_actions , " printer_state_change " ) ;
stateAct - > setDelayed ( false ) ;
stateAct - > insert ( new KAction ( i18n ( " &Start Printer " ) , " kdeprint_enableprinter " , 0 , this , TQT_SLOT ( slotChangePrinterState ( ) ) , m_actions , " printer_start " ) ) ;
stateAct - > insert ( new KAction ( i18n ( " Sto&p Printer " ) , " kdeprint_stopprinter " , 0 , this , TQT_SLOT ( slotChangePrinterState ( ) ) , m_actions , " printer_stop " ) ) ;
stateAct = new KActionMenu ( i18n ( " Enable/Disable Job Spooling " ) , " kdeprint_queuestate " , m_actions , " printer_spool_change " ) ;
stateAct - > setDelayed ( false ) ;
stateAct - > insert ( new KAction ( i18n ( " &Enable Job Spooling " ) , " kdeprint_enableprinter " , 0 , this , TQT_SLOT ( slotChangePrinterState ( ) ) , m_actions , " printer_enable " ) ) ;
stateAct - > insert ( new KAction ( i18n ( " &Disable Job Spooling " ) , " kdeprint_stopprinter " , 0 , this , TQT_SLOT ( slotChangePrinterState ( ) ) , m_actions , " printer_disable " ) ) ;
new KAction ( i18n ( " &Remove " ) , " edittrash " , 0 , this , TQT_SLOT ( slotRemove ( ) ) , m_actions , " printer_remove " ) ;
new KAction ( i18n ( " &Configure... " ) , " configure " , 0 , this , TQT_SLOT ( slotConfigure ( ) ) , m_actions , " printer_configure " ) ;
new KAction ( i18n ( " Add &Printer/Class... " ) , " kdeprint_addprinter " , 0 , this , TQT_SLOT ( slotAdd ( ) ) , m_actions , " printer_add " ) ;
new KAction ( i18n ( " Add &Special (pseudo) Printer . . . " ), " kdeprint_addpseudo " ,0,this,TQT_SLOT(slotAddSpecial()),m_actions, " printer_add_special " ) ;
new KAction ( i18n ( " Set as &Local Default " ) , " kdeprint_defaulthard " , 0 , this , TQT_SLOT ( slotHardDefault ( ) ) , m_actions , " printer_hard_default " ) ;
new KAction ( i18n ( " Set as &User Default " ) , " kdeprint_defaultsoft " , 0 , this , TQT_SLOT ( slotSoftDefault ( ) ) , m_actions , " printer_soft_default " ) ;
new KAction ( i18n ( " &Test Printer... " ) , " kdeprint_testprinter " , 0 , this , TQT_SLOT ( slotTest ( ) ) , m_actions , " printer_test " ) ;
new KAction ( i18n ( " Configure &Manager... " ) , " kdeprint_configmgr " , 0 , this , TQT_SLOT ( slotManagerConfigure ( ) ) , m_actions , " manager_configure " ) ;
new KAction ( i18n ( " Initialize Manager/&View " ) , " reload " , 0 , this , TQT_SLOT ( slotInit ( ) ) , m_actions , " view_refresh " ) ;
KIconSelectAction * dact = new KIconSelectAction ( i18n ( " &Orientation " ) , 0 , m_actions , " orientation_change " ) ;
iconlst . clear ( ) ;
iconlst < < " view_top_bottom " < < " view_left_right " ;
dact - > setItems ( TQStringList : : split ( ' , ' , i18n ( " &Vertical,&Horizontal " ) , false ) , iconlst ) ;
dact - > setCurrentItem ( 0 ) ;
connect ( dact , TQT_SIGNAL ( activated ( int ) ) , TQT_SLOT ( slotChangeDirection ( int ) ) ) ;
new KAction ( i18n ( " R&estart Server " ) , " kdeprint_restartsrv " , 0 , this , TQT_SLOT ( slotServerRestart ( ) ) , m_actions , " server_restart " ) ;
new KAction ( i18n ( " Configure &Server... " ) , " kdeprint_configsrv " , 0 , this , TQT_SLOT ( slotServerConfigure ( ) ) , m_actions , " server_configure " ) ;
new KAction ( i18n ( " Configure Server Access... " ) , " kdeprint_configsrv " , 0 , this , TQT_SLOT ( slotServerAccessConfigure ( ) ) , m_actions , " server_access_configure " ) ;
KToggleAction * tact = new KToggleAction ( i18n ( " Show &Toolbar " ) , 0 , m_actions , " view_toolbar " ) ;
tact - > setCheckedState ( i18n ( " Hide &Toolbar " ) ) ;
connect ( tact , TQT_SIGNAL ( toggled ( bool ) ) , TQT_SLOT ( slotToggleToolBar ( bool ) ) ) ;
tact = new KToggleAction ( i18n ( " Show Me&nu Toolbar " ) , 0 , m_actions , " view_menubar " ) ;
tact - > setCheckedState ( i18n ( " Hide Me&nu Toolbar " ) ) ;
connect ( tact , TQT_SIGNAL ( toggled ( bool ) ) , TQT_SLOT ( slotToggleMenuBar ( bool ) ) ) ;
tact = new KToggleAction ( i18n ( " Show Pr&inter Details " ) , " kdeprint_printer_infos " , 0 , m_actions , " view_printerinfos " ) ;
tact - > setCheckedState ( KGuiItem ( i18n ( " Hide Pr&inter Details " ) , " kdeprint_printer_infos " ) ) ;
tact - > setChecked ( true ) ;
connect ( tact , TQT_SIGNAL ( toggled ( bool ) ) , TQT_SLOT ( slotShowPrinterInfos ( bool ) ) ) ;
tact = new KToggleAction ( i18n ( " Toggle Printer &Filtering " ) , " filter " , 0 , m_actions , " view_pfilter " ) ;
tact - > setChecked ( KMManager : : self ( ) - > isFilterEnabled ( ) ) ;
connect ( tact , TQT_SIGNAL ( toggled ( bool ) ) , TQT_SLOT ( slotToggleFilter ( bool ) ) ) ;
new KAction ( i18n ( " %1 &Handbook " ) . arg ( " KDEPrint " ) , " contents " , 0 , this , TQT_SLOT ( slotHelp ( ) ) , m_actions , " invoke_help " ) ;
new KAction ( i18n ( " %1 &Web Site " ) . arg ( " KDEPrint " ) , " network " , 0 , this , TQT_SLOT ( slotHelp ( ) ) , m_actions , " invoke_web " ) ;
KActionMenu * mact = new KActionMenu ( i18n ( " Pri&nter Tools " ) , " package_utilities " , m_actions , " printer_tool " ) ;
mact - > setDelayed ( false ) ;
connect ( mact - > popupMenu ( ) , TQT_SIGNAL ( activated ( int ) ) , TQT_SLOT ( slotToolSelected ( int ) ) ) ;
QStringList files = KGlobal : : dirs ( ) - > findAllResources ( " data " , " kdeprint/tools/*.desktop " ) ;
for ( TQStringList : : ConstIterator it = files . begin ( ) ; it ! = files . end ( ) ; + + it )
{
KSimpleConfig conf ( * it ) ;
conf . setGroup ( " Desktop Entry " ) ;
mact - > popupMenu ( ) - > insertItem ( conf . readEntry ( " Name " , " Unnamed " ) , mact - > popupMenu ( ) - > count ( ) ) ;
m_toollist < < conf . readEntry ( " X-KDE-Library " ) ;
}
// add actions to the toolbar
m_actions - > action ( " printer_add " ) - > plug ( m_toolbar ) ;
m_actions - > action ( " printer_add_special " ) - > plug ( m_toolbar ) ;
m_toolbar - > insertLineSeparator ( ) ;
m_actions - > action ( " printer_state_change " ) - > plug ( m_toolbar ) ;
m_actions - > action ( " printer_spool_change " ) - > plug ( m_toolbar ) ;
m_toolbar - > insertSeparator ( ) ;
m_actions - > action ( " printer_hard_default " ) - > plug ( m_toolbar ) ;
m_actions - > action ( " printer_soft_default " ) - > plug ( m_toolbar ) ;
m_actions - > action ( " printer_remove " ) - > plug ( m_toolbar ) ;
m_toolbar - > insertSeparator ( ) ;
m_actions - > action ( " printer_configure " ) - > plug ( m_toolbar ) ;
m_actions - > action ( " printer_test " ) - > plug ( m_toolbar ) ;
m_actions - > action ( " printer_tool " ) - > plug ( m_toolbar ) ;
m_pactionsindex = m_toolbar - > insertSeparator ( ) ;
m_toolbar - > insertLineSeparator ( ) ;
m_actions - > action ( " server_restart " ) - > plug ( m_toolbar ) ;
m_actions - > action ( " server_configure " ) - > plug ( m_toolbar ) ;
m_toolbar - > insertLineSeparator ( ) ;
m_actions - > action ( " manager_configure " ) - > plug ( m_toolbar ) ;
m_actions - > action ( " view_refresh " ) - > plug ( m_toolbar ) ;
m_toolbar - > insertLineSeparator ( ) ;
m_actions - > action ( " view_printerinfos " ) - > plug ( m_toolbar ) ;
m_actions - > action ( " view_change " ) - > plug ( m_toolbar ) ;
m_actions - > action ( " orientation_change " ) - > plug ( m_toolbar ) ;
m_actions - > action ( " view_pfilter " ) - > plug ( m_toolbar ) ;
// add actions to the menu bar
TQPopupMenu * menu = new TQPopupMenu ( this ) ;
m_actions - > action ( " printer_add " ) - > plug ( menu ) ;
m_actions - > action ( " printer_add_special " ) - > plug ( menu ) ;
//m_menubar->insertItem( i18n( "Add" ), menu );
m_menubar - > insertButton ( " wizard " , 0 , true , i18n ( " Add " ) ) ;
m_menubar - > getButton ( 0 ) - > setPopup ( menu , true ) ;
menu = new TQPopupMenu ( this ) ;
m_actions - > action ( " printer_state_change " ) - > plug ( menu ) ;
m_actions - > action ( " printer_spool_change " ) - > plug ( menu ) ;
menu - > insertSeparator ( ) ;
m_actions - > action ( " printer_hard_default " ) - > plug ( menu ) ;
m_actions - > action ( " printer_soft_default " ) - > plug ( menu ) ;
m_actions - > action ( " printer_remove " ) - > plug ( menu ) ;
menu - > insertSeparator ( ) ;
m_actions - > action ( " printer_configure " ) - > plug ( menu ) ;
m_actions - > action ( " printer_test " ) - > plug ( menu ) ;
m_actions - > action ( " printer_tool " ) - > plug ( menu ) ;
menu - > insertSeparator ( ) ;
//m_menubar->insertItem( i18n( "Printer" ), menu );
m_menubar - > insertButton ( " printer1 " , 1 , true , i18n ( " Printer " ) ) ;
m_menubar - > getButton ( 1 ) - > setPopup ( menu , true ) ;
menu = new TQPopupMenu ( this ) ;
m_actions - > action ( " server_restart " ) - > plug ( menu ) ;
m_actions - > action ( " server_configure " ) - > plug ( menu ) ;
//m_menubar->insertItem( i18n( "Server" ), menu );
m_menubar - > insertButton ( " misc " , 2 , true , i18n ( " Print Server " ) ) ;
m_menubar - > getButton ( 2 ) - > setPopup ( menu , true ) ;
menu = new TQPopupMenu ( this ) ;
m_actions - > action ( " manager_configure " ) - > plug ( menu ) ;
m_actions - > action ( " view_refresh " ) - > plug ( menu ) ;
//m_menubar->insertItem( i18n( "Manager" ), menu );
m_menubar - > insertButton ( " kdeprint_configmgr " , 3 , true , i18n ( " Print Manager " ) ) ;
m_menubar - > getButton ( 3 ) - > setPopup ( menu , true ) ;
menu = new TQPopupMenu ( this ) ;
m_actions - > action ( " view_printerinfos " ) - > plug ( menu ) ;
m_actions - > action ( " view_change " ) - > plug ( menu ) ;
m_actions - > action ( " orientation_change " ) - > plug ( menu ) ;
m_actions - > action ( " view_toolbar " ) - > plug ( menu ) ;
m_actions - > action ( " view_menubar " ) - > plug ( menu ) ;
menu - > insertSeparator ( ) ;
m_actions - > action ( " view_pfilter " ) - > plug ( menu ) ;
//m_menubar->insertItem( i18n( "View" ), menu );
m_menubar - > insertButton ( " view_remove " , 4 , true , i18n ( " View " ) ) ;
m_menubar - > getButton ( 4 ) - > setPopup ( menu , true ) ;
//m_menubar->setMinimumHeight( m_menubar->heightForWidth( 1000 ) );
menu = new TQPopupMenu ( this ) ;
m_actions - > action ( " invoke_help " ) - > plug ( menu ) ;
m_actions - > action ( " invoke_web " ) - > plug ( menu ) ;
m_menubar - > insertButton ( " help " , 5 , true , i18n ( " Documentation " ) ) ;
m_menubar - > getButton ( 5 ) - > setPopup ( menu , true ) ;
loadPluginActions ( ) ;
slotPrinterSelected ( TQString : : null ) ;
}
void KMMainView : : slotRefresh ( )
{
// TODO: remove me
}
void KMMainView : : slotTimer ( )
{
kdDebug ( ) < < " KMMainView::slotTimer " < < endl ;
TQPtrList < KMPrinter > * printerlist = m_manager - > printerList ( ) ;
bool ok = m_manager - > errorMsg ( ) . isEmpty ( ) ;
m_printerview - > setPrinterList ( printerlist ) ;
if ( m_first )
{
if ( ! ok )
showErrorMsg ( i18n ( " An error occurred while retrieving the printer list. " ) ) ;
else
{
/* try to select the most appropriate printer:
* - soft default owner printer
* - hard default printer
* - first printer
*/
TQPtrListIterator < KMPrinter > it ( * printerlist ) ;
KMPrinter * p1 = 0 , * p2 = 0 , * p3 = 0 ;
while ( it . current ( ) )
{
if ( ! it . current ( ) - > isVirtual ( ) )
{
if ( it . current ( ) - > ownSoftDefault ( ) )
{
p1 = it . current ( ) ;
break ;
}
else if ( it . current ( ) - > isHardDefault ( ) )
p2 = it . current ( ) ;
else if ( ! p3 )
p3 = it . current ( ) ;
}
+ + it ;
}
if ( p1 | | p2 | | p3 )
m_printerview - > setPrinter ( p1 ? p1 : ( p2 ? p2 : p3 ) ) ;
}
m_first = false ;
}
}
void KMMainView : : slotPrinterSelected ( const TQString & prname )
{
KMPrinter * p = KMManager : : self ( ) - > findPrinter ( prname ) ;
m_current = p ;
if ( p & & ! p - > isSpecial ( ) )
KMFactory : : self ( ) - > manager ( ) - > completePrinter ( p ) ;
m_printerpages - > setPrinter ( p ) ;
// update actions state (only if toolbar enabled, workaround for toolbar
// problem).
//if (m_toolbar->isEnabled())
//{
int mask = ( m_manager - > hasManagement ( ) ? m_manager - > printerOperationMask ( ) : 0 ) ;
bool sp = ! ( p & & p - > isSpecial ( ) ) ;
// m_actions->action("printer_remove")->setEnabled(!sp || ((mask & KMManager::PrinterRemoval) && p && p->isLocal() && !p->isImplicit()));
m_actions - > action ( " printer_remove " ) - > setEnabled ( ! sp | | ( ( mask & KMManager : : PrinterRemoval ) & & p & & ! p - > isImplicit ( ) ) ) ;
m_actions - > action ( " printer_configure " ) - > setEnabled ( ! sp | | ( ( mask & KMManager : : PrinterConfigure ) & & p & & ! p - > isClass ( true ) /*&& p->isLocal()*/ ) ) ;
m_actions - > action ( " printer_hard_default " ) - > setEnabled ( ( sp & & ( mask & KMManager : : PrinterDefault ) & & p & & ! p - > isClass ( true ) & & ! p - > isHardDefault ( ) & & p - > isLocal ( ) ) ) ;
m_actions - > action ( " printer_soft_default " ) - > setEnabled ( ( p & & ! p - > isSoftDefault ( ) ) ) ;
m_actions - > action ( " printer_test " ) - > setEnabled ( ( sp & & ( mask & KMManager : : PrinterTesting ) & & p & & ! p - > isClass ( true ) ) ) ;
bool stmask = ( sp & & ( mask & KMManager : : PrinterEnabling ) & & p ) ;
m_actions - > action ( " printer_state_change " ) - > setEnabled ( stmask & & p - > isLocal ( ) ) ;
m_actions - > action ( " printer_spool_change " ) - > setEnabled ( stmask ) ;
m_actions - > action ( " printer_start " ) - > setEnabled ( ( stmask & & p - > state ( ) = = KMPrinter : : Stopped ) ) ;
m_actions - > action ( " printer_stop " ) - > setEnabled ( ( stmask & & p - > state ( ) ! = KMPrinter : : Stopped ) ) ;
m_actions - > action ( " printer_enable " ) - > setEnabled ( ( stmask & & ! p - > acceptJobs ( ) ) ) ;
m_actions - > action ( " printer_disable " ) - > setEnabled ( ( stmask & & p - > acceptJobs ( ) ) ) ;
m_actions - > action ( " printer_add " ) - > setEnabled ( ( mask & KMManager : : PrinterCreation ) ) ;
mask = m_manager - > serverOperationMask ( ) ;
m_actions - > action ( " server_restart " ) - > setEnabled ( ( mask & KMManager : : ServerRestarting ) ) ;
m_actions - > action ( " server_configure " ) - > setEnabled ( ( mask & KMManager : : ServerConfigure ) ) ;
KMFactory : : self ( ) - > manager ( ) - > validatePluginActions ( m_actions , p ) ;
//}
m_actions - > action ( " printer_tool " ) - > setEnabled ( p & & ! p - > isClass ( true ) & & ! p - > isRemote ( ) & & ! p - > isSpecial ( ) ) ;
}
void KMMainView : : setViewType ( int ID )
{
( ( KSelectAction * ) m_actions - > action ( " view_change " ) ) - > setCurrentItem ( ID ) ;
slotChangeView ( ID ) ;
}
int KMMainView : : viewType ( ) const
{ return m_printerview - > viewType ( ) ; }
void KMMainView : : slotChangeView ( int ID )
{
kdDebug ( ) < < " KMMainView::slotChangeView " < < endl ;
if ( ID > = KMPrinterView : : Icons & & ID < = KMPrinterView : : Tree )
m_printerview - > setViewType ( ( KMPrinterView : : ViewType ) ID ) ;
}
void KMMainView : : slotRightButtonClicked ( const TQString & prname , const TQPoint & p )
{
KMPrinter * printer = KMManager : : self ( ) - > findPrinter ( prname ) ;
// construct popup menu
m_pop - > clear ( ) ;
if ( printer )
{
m_current = printer ;
if ( ! printer - > isSpecial ( ) )
{
if ( printer - > isLocal ( ) )
m_actions - > action ( ( printer - > state ( ) = = KMPrinter : : Stopped ? " printer_start " : " printer_stop " ) ) - > plug ( m_pop ) ;
m_actions - > action ( ( printer - > acceptJobs ( ) ? " printer_disable " : " printer_enable " ) ) - > plug ( m_pop ) ;
m_pop - > insertSeparator ( ) ;
}
if ( ! printer - > isSoftDefault ( ) ) m_actions - > action ( " printer_soft_default " ) - > plug ( m_pop ) ;
if ( printer - > isLocal ( ) & & ! printer - > isImplicit ( ) )
{
if ( ! printer - > isHardDefault ( ) ) m_actions - > action ( " printer_hard_default " ) - > plug ( m_pop ) ;
m_actions - > action ( " printer_remove " ) - > plug ( m_pop ) ;
m_pop - > insertSeparator ( ) ;
if ( ! printer - > isClass ( true ) )
{
m_actions - > action ( " printer_configure " ) - > plug ( m_pop ) ;
m_actions - > action ( " printer_test " ) - > plug ( m_pop ) ;
m_actions - > action ( " printer_tool " ) - > plug ( m_pop ) ;
m_pop - > insertSeparator ( ) ;
}
}
else
{
m_actions - > action ( " printer_remove " ) - > plug ( m_pop ) ;
m_pop - > insertSeparator ( ) ;
if ( ! printer - > isClass ( true ) )
{
m_actions - > action ( " printer_configure " ) - > plug ( m_pop ) ;
m_actions - > action ( " printer_test " ) - > plug ( m_pop ) ;
}
m_pop - > insertSeparator ( ) ;
}
if ( ! printer - > isSpecial ( ) )
{
TQValueList < KAction * > pactions = m_actions - > actions ( " plugin " ) ;
for ( TQValueList < KAction * > : : Iterator it = pactions . begin ( ) ; it ! = pactions . end ( ) ; + + it )
( * it ) - > plug ( m_pop ) ;
if ( pactions . count ( ) > 0 )
m_pop - > insertSeparator ( ) ;
}
}
else
{
m_actions - > action ( " printer_add " ) - > plug ( m_pop ) ;
m_actions - > action ( " printer_add_special " ) - > plug ( m_pop ) ;
m_pop - > insertSeparator ( ) ;
m_actions - > action ( " server_restart " ) - > plug ( m_pop ) ;
m_actions - > action ( " server_configure " ) - > plug ( m_pop ) ;
m_pop - > insertSeparator ( ) ;
m_actions - > action ( " manager_configure " ) - > plug ( m_pop ) ;
m_actions - > action ( " view_refresh " ) - > plug ( m_pop ) ;
m_pop - > insertSeparator ( ) ;
}
m_actions - > action ( " view_printerinfos " ) - > plug ( m_pop ) ;
m_actions - > action ( " view_change " ) - > plug ( m_pop ) ;
m_actions - > action ( " orientation_change " ) - > plug ( m_pop ) ;
m_actions - > action ( " view_toolbar " ) - > plug ( m_pop ) ;
m_actions - > action ( " view_menubar " ) - > plug ( m_pop ) ;
m_pop - > insertSeparator ( ) ;
m_actions - > action ( " view_pfilter " ) - > plug ( m_pop ) ;
// pop the menu
m_pop - > popup ( p ) ;
}
void KMMainView : : slotChangePrinterState ( )
{
QString opname = sender ( ) - > name ( ) ;
if ( m_current & & opname . startsWith ( " printer_ " ) )
{
opname = opname . mid ( 8 ) ;
KMTimer : : self ( ) - > hold ( ) ;
bool result ( false ) ;
if ( opname = = " enable " )
result = m_manager - > enablePrinter ( m_current , true ) ;
else if ( opname = = " disable " )
result = m_manager - > enablePrinter ( m_current , false ) ;
else if ( opname = = " start " )
result = m_manager - > startPrinter ( m_current , true ) ;
else if ( opname = = " stop " )
result = m_manager - > startPrinter ( m_current , false ) ;
if ( ! result )
showErrorMsg ( i18n ( " Unable to modify the state of printer %1. " ) . arg ( m_current - > printerName ( ) ) ) ;
KMTimer : : self ( ) - > release ( result ) ;
}
}
void KMMainView : : slotRemove ( )
{
if ( m_current )
{
KMTimer : : self ( ) - > hold ( ) ;
bool result ( false ) ;
if ( KMessageBox : : warningYesNo ( this , i18n ( " Do you really want to remove %1? " ) . arg ( m_current - > printerName ( ) ) ) = = KMessageBox : : Yes )
if ( m_current - > isSpecial ( ) )
{
if ( ! ( result = m_manager - > removeSpecialPrinter ( m_current ) ) )
showErrorMsg ( i18n ( " Unable to remove special printer %1. " ) . arg ( m_current - > printerName ( ) ) ) ;
}
else if ( ! ( result = m_manager - > removePrinter ( m_current ) ) )
showErrorMsg ( i18n ( " Unable to remove printer %1. " ) . arg ( m_current - > printerName ( ) ) ) ;
KMTimer : : self ( ) - > release ( result ) ;
}
}
void KMMainView : : slotConfigure ( )
{
if ( m_current )
{
KMTimer : : self ( ) - > hold ( ) ;
bool needRefresh ( false ) ;
if ( m_current - > isSpecial ( ) )
{
KMSpecialPrinterDlg dlg ( this ) ;
dlg . setPrinter ( m_current ) ;
if ( dlg . exec ( ) )
{
KMPrinter * prt = dlg . printer ( ) ;
if ( prt - > name ( ) ! = m_current - > name ( ) )
m_manager - > removeSpecialPrinter ( m_current ) ;
m_manager - > createSpecialPrinter ( prt ) ;
needRefresh = true ;
}
}
else
{
DrMain * driver = m_manager - > loadPrinterDriver ( m_current , true ) ;
if ( driver )
{
KMDriverDialog dlg ( this ) ;
dlg . setCaption ( i18n ( " Configure %1 " ) . arg ( m_current - > printerName ( ) ) ) ;
dlg . setDriver ( driver ) ;
// disable OK button for remote printer (read-only dialog)
if ( m_current - > isRemote ( ) )
dlg . enableButtonOK ( false ) ;
if ( dlg . exec ( ) )
if ( ! m_manager - > savePrinterDriver ( m_current , driver ) )
showErrorMsg ( i18n ( " Unable to modify settings of printer %1. " ) . arg ( m_current - > printerName ( ) ) ) ;
delete driver ;
}
else
showErrorMsg ( i18n ( " Unable to load a valid driver for printer %1. " ) . arg ( m_current - > printerName ( ) ) ) ;
}
KMTimer : : self ( ) - > release ( needRefresh ) ;
}
}
void KMMainView : : slotAdd ( )
{
KMTimer : : self ( ) - > hold ( ) ;
int result ( 0 ) ;
if ( ( result = kdeprint_management_add_printer_wizard ( this ) ) = = - 1 )
showErrorMsg ( i18n ( " Unable to create printer. " ) ) ;
KMTimer : : self ( ) - > release ( ( result = = 1 ) ) ;
}
void KMMainView : : slotHardDefault ( )
{
if ( m_current )
{
KMTimer : : self ( ) - > hold ( ) ;
bool result = m_manager - > setDefaultPrinter ( m_current ) ;
if ( ! result )
showErrorMsg ( i18n ( " Unable to define printer %1 as default. " ) . arg ( m_current - > printerName ( ) ) ) ;
KMTimer : : self ( ) - > release ( result ) ;
}
}
void KMMainView : : slotSoftDefault ( )
{
if ( m_current )
{
KMTimer : : self ( ) - > hold ( ) ;
KMFactory : : self ( ) - > virtualManager ( ) - > setAsDefault ( m_current , TQString : : null ) ;
KMTimer : : self ( ) - > release ( true ) ;
}
}
void KMMainView : : setOrientation ( int o )
{
int ID = ( o = = Qt : : Horizontal ? 1 : 0 ) ;
( ( KSelectAction * ) m_actions - > action ( " orientation_change " ) ) - > setCurrentItem ( ID ) ;
slotChangeDirection ( ID ) ;
}
int KMMainView : : orientation ( ) const
{ return ( m_boxlayout - > direction ( ) = = TQBoxLayout : : LeftToRight ? Qt : : Horizontal : Qt : : Vertical ) ; }
void KMMainView : : slotChangeDirection ( int d )
{
m_boxlayout - > setDirection ( d = = 1 ? TQBoxLayout : : LeftToRight : TQBoxLayout : : TopToBottom ) ;
}
void KMMainView : : slotTest ( )
{
if ( m_current )
{
KMTimer : : self ( ) - > hold ( ) ;
if ( KMessageBox : : warningContinueCancel ( this , i18n ( " You are about to print a test page on %1. Do you want to continue? " ) . arg ( m_current - > printerName ( ) ) , TQString : : null , i18n ( " Print Test Page " ) , " printTestPage " ) = = KMessageBox : : Continue )
{
if ( KMFactory : : self ( ) - > manager ( ) - > testPrinter ( m_current ) )
KMessageBox : : information ( this , i18n ( " Test page successfully sent to printer %1. " ) . arg ( m_current - > printerName ( ) ) ) ;
else
showErrorMsg ( i18n ( " Unable to test printer %1. " ) . arg ( m_current - > printerName ( ) ) ) ;
}
KMTimer : : self ( ) - > release ( true ) ;
}
}
void KMMainView : : showErrorMsg ( const TQString & msg , bool usemgr )
{
QString s ( msg ) ;
if ( usemgr )
{
s . prepend ( " <p> " ) ;
s . append ( " " ) ;
s + = i18n ( " Error message received from manager:</p><p>%1</p> " ) ;
if ( m_manager - > errorMsg ( ) . isEmpty ( ) )
s = s . arg ( i18n ( " Internal error (no error message). " ) ) ;
else
s = s . arg ( m_manager - > errorMsg ( ) ) ;
// clean up error message
m_manager - > setErrorMsg ( TQString : : null ) ;
}
s . prepend ( " <qt> " ) . append ( " </qt> " ) ;
KMTimer : : self ( ) - > hold ( ) ;
KMessageBox : : error ( this , s ) ;
KMTimer : : self ( ) - > release ( ) ;
}
void KMMainView : : slotServerRestart ( )
{
KMTimer : : self ( ) - > hold ( ) ;
bool result = m_manager - > restartServer ( ) ;
if ( ! result )
{
showErrorMsg ( i18n ( " Unable to restart print server. " ) ) ;
KMTimer : : self ( ) - > release ( false ) ;
}
else
{
reset ( i18n ( " Restarting server... " ) , false , false ) ;
}
}
void KMMainView : : slotServerConfigure ( )
{
KMTimer : : self ( ) - > hold ( ) ;
bool result = m_manager - > configureServer ( this ) ;
if ( ! result )
{
showErrorMsg ( i18n ( " Unable to configure print server. " ) ) ;
KMTimer : : self ( ) - > release ( false ) ;
}
else
{
reset ( i18n ( " Configuring server... " ) , false , false ) ;
}
}
void KMMainView : : slotServerConfigureAccess ( )
{
KProcess * proc = new KProcess ;
* proc < < " /usr/bin/system-config-printer-kde " ;
proc - > start ( KProcess : : DontCare ) ;
}
void KMMainView : : slotToggleToolBar ( bool on )
{
if ( on ) m_toolbar - > show ( ) ;
else m_toolbar - > hide ( ) ;
}
void KMMainView : : slotToggleMenuBar ( bool on )
{
if ( on )
m_menubar - > show ( ) ;
else
m_menubar - > hide ( ) ;
}
void KMMainView : : slotManagerConfigure ( )
{
KMTimer : : self ( ) - > hold ( ) ;
KMConfigDialog dlg ( this , " ConfigDialog " ) ;
if ( dlg . exec ( ) )
{
loadParameters ( ) ;
}
/* when "OK":
* = > the config file is saved
* = > triggering a DCOP signal
* = > configChanged ( ) called
* hence no need to refresh , just release the timer
*/
KMTimer : : self ( ) - > release ( false ) ;
}
void KMMainView : : slotAddSpecial ( )
{
KMTimer : : self ( ) - > hold ( ) ;
KMSpecialPrinterDlg dlg ( this ) ;
if ( dlg . exec ( ) )
{
KMPrinter * prt = dlg . printer ( ) ;
m_manager - > createSpecialPrinter ( prt ) ;
}
KMTimer : : self ( ) - > release ( true ) ;
}
void KMMainView : : slotShowPrinterInfos ( bool on )
{
if ( on )
m_printerpages - > show ( ) ;
else
m_printerpages - > hide ( ) ;
m_actions - > action ( " orientation_change " ) - > setEnabled ( on ) ;
}
void KMMainView : : enableToolbar ( bool on )
{
KToggleAction * act = ( KToggleAction * ) m_actions - > action ( " view_toolbar " ) ;
m_toolbar - > setEnabled ( on ) ;
act - > setEnabled ( on ) ;
if ( on & & act - > isChecked ( ) )
m_toolbar - > show ( ) ;
else
m_toolbar - > hide ( ) ;
}
KAction * KMMainView : : action ( const char * name )
{
return m_actions - > action ( name ) ;
}
/*
void KMMainView : : aboutToReload ( )
{
m_printerview - > setPrinterList ( 0 ) ;
}
*/
void KMMainView : : reload ( )
{
removePluginActions ( ) ;
loadPluginActions ( ) ;
// redo the connection as the old manager object has been removed
connect ( m_manager , TQT_SIGNAL ( updatePossible ( bool ) ) , TQT_SLOT ( slotUpdatePossible ( bool ) ) ) ;
// We must delay the refresh such that all objects has been
// correctly reloaded (otherwise, crash in KMJobViewer).
reset ( i18n ( " Initializing manager... " ) , true , true ) ;
}
void KMMainView : : showPrinterInfos ( bool on )
{
static_cast < KToggleAction * > ( m_actions - > action ( " view_printerinfos " ) ) - > setChecked ( on ) ;
slotShowPrinterInfos ( on ) ;
}
bool KMMainView : : printerInfosShown ( ) const
{
return ( static_cast < KToggleAction * > ( m_actions - > action ( " view_printerinfos " ) ) - > isChecked ( ) ) ;
}
void KMMainView : : loadPluginActions ( )
{
KMFactory : : self ( ) - > manager ( ) - > createPluginActions ( m_actions ) ;
TQValueList < KAction * > pactions = m_actions - > actions ( " plugin " ) ;
int index = m_pactionsindex ;
//TQPopupMenu *menu = m_menubar->findItem( m_menubar->idAt( 1 ) )->popup();
TQPopupMenu * menu = m_menubar - > getButton ( 1 ) - > popup ( ) ;
for ( TQValueList < KAction * > : : Iterator it = pactions . begin ( ) ; it ! = pactions . end ( ) ; + + it )
{
( * it ) - > plug ( m_toolbar , index + + ) ;
( * it ) - > plug ( menu ) ;
}
}
void KMMainView : : removePluginActions ( )
{
TQValueList < KAction * > pactions = m_actions - > actions ( " plugin " ) ;
for ( TQValueList < KAction * > : : Iterator it = pactions . begin ( ) ; it ! = pactions . end ( ) ; + + it )
{
( * it ) - > unplugAll ( ) ;
delete ( * it ) ;
}
}
void KMMainView : : slotToolSelected ( int ID )
{
KMTimer : : self ( ) - > hold ( ) ;
QString libname = m_toollist [ ID ] ;
libname . prepend ( " kdeprint_tool_ " ) ;
if ( m_current & & ! m_current - > device ( ) . isEmpty ( ) & & ! libname . isEmpty ( ) )
{
KLibFactory * factory = KLibLoader : : self ( ) - > factory ( libname . local8Bit ( ) ) ;
if ( factory )
{
QStringList args ;
args < < m_current - > device ( ) < < m_current - > printerName ( ) ;
KDialogBase * dlg = static_cast < KDialogBase * > ( factory - > create ( this , " Tool " , 0 , args ) ) ;
if ( dlg )
dlg - > exec ( ) ;
delete dlg ;
}
}
else
KMessageBox : : error ( this ,
i18n ( " Unable to start printer tool. Possible reasons are: "
" no printer selected, the selected printer doesn't have "
" any local device defined (printer port), or the tool library "
" could not be found. " ) ) ;
KMTimer : : self ( ) - > release ( ) ;
}
void KMMainView : : slotToggleFilter ( bool on )
{
KMTimer : : self ( ) - > hold ( ) ;
KMManager : : self ( ) - > enableFilter ( on ) ;
KMTimer : : self ( ) - > release ( true ) ;
}
void KMMainView : : configChanged ( )
{
reset ( i18n ( " Initializing manager... " ) , false , true ) ;
}
void KMMainView : : slotUpdatePossible ( bool flag )
{
destroyMessageWindow ( ) ;
if ( ! flag )
showErrorMsg ( i18n ( " Unable to retrieve the printer list. " ) ) ;
KMTimer : : self ( ) - > release ( true ) ;
}
void KMMainView : : createMessageWindow ( const TQString & txt , int delay )
{
destroyMessageWindow ( ) ;
MessageWindow : : add ( m_printerview , txt , delay ) ;
}
void KMMainView : : destroyMessageWindow ( )
{
MessageWindow : : remove ( m_printerview ) ;
}
void KMMainView : : slotInit ( )
{
reset ( i18n ( " Initializing manager... " ) , true , true ) ;
}
void KMMainView : : reset ( const TQString & msg , bool useDelay , bool holdTimer )
{
if ( holdTimer )
KMTimer : : self ( ) - > hold ( ) ;
m_printerview - > setPrinterList ( 0 ) ;
if ( ! msg . isEmpty ( ) )
createMessageWindow ( msg , ( useDelay ? 500 : 0 ) ) ;
m_first = true ;
m_manager - > checkUpdatePossible ( ) ;
}
void KMMainView : : slotHelp ( )
{
TQString s = sender ( ) - > name ( ) ;
if ( s = = " invoke_help " )
kapp - > invokeHelp ( TQString : : null , " kdeprint " ) ;
else if ( s = = " invoke_web " )
{
TQStringList args ;
args < < " exec " < < " http://printing.kde.org " ;
kapp - > kdeinitExec ( " kfmclient " , args ) ;
}
else
kdDebug ( 500 ) < < " Unknown help invokator: " < < s < < endl ;
}
# include "kmmainview.moc"