00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include "kmjobviewer.h"
00021
#include "kmjobmanager.h"
00022
#include "kmfactory.h"
00023
#include "kmjob.h"
00024
#include "kmprinter.h"
00025
#include "kmmanager.h"
00026
#include "kmuimanager.h"
00027
#include "jobitem.h"
00028
#include "kmtimer.h"
00029
#include "kmconfigjobs.h"
00030
#include "kmconfigpage.h"
00031
#include "kprinter.h"
00032
00033
#include <klistview.h>
00034
#include <kstatusbar.h>
00035
#include <qpopupmenu.h>
00036
#include <kmessagebox.h>
00037
#include <klocale.h>
00038
#include <kpopupmenu.h>
00039
#include <kaction.h>
00040
#include <kstdaction.h>
00041
#include <kiconloader.h>
00042
#include <kapplication.h>
00043
#include <kcursor.h>
00044
#include <kmenubar.h>
00045
#include <kdebug.h>
00046
#include <kwin.h>
00047
#include <kio/netaccess.h>
00048
#include <qtimer.h>
00049
#include <qlayout.h>
00050
#include <stdlib.h>
00051
#include <qlineedit.h>
00052
#include <kdialogbase.h>
00053
#include <qcheckbox.h>
00054
#include <kurldrag.h>
00055
#include <kconfig.h>
00056
00057
#undef m_manager
00058
#define m_manager KMFactory::self()->jobManager()
00059
00060
class KJobListView :
public KListView
00061 {
00062
public:
00063 KJobListView(
QWidget *parent = 0,
const char *name = 0 );
00064
00065
protected:
00066
bool acceptDrag(
QDropEvent* ) const;
00067 };
00068
00069 KJobListView::KJobListView(
QWidget *parent, const
char *name )
00070 : KListView( parent, name )
00071 {
00072 setAcceptDrops(
true );
00073 setDropVisualizer(
false );
00074 }
00075
00076
bool KJobListView::acceptDrag(
QDropEvent *e )
const
00077
{
00078
if ( KURLDrag::canDecode( e ) )
00079
return true;
00080
else
00081
return KListView::acceptDrag( e );
00082 }
00083
00084 KMJobViewer::KMJobViewer(
QWidget *parent,
const char *name)
00085 : KMainWindow(parent,name)
00086 {
00087 m_view = 0;
00088 m_pop = 0;
00089 m_jobs.setAutoDelete(
false);
00090 m_items.setAutoDelete(
false);
00091 m_printers.setAutoDelete(
false);
00092 m_type = KMJobManager::ActiveJobs;
00093 m_stickybox = 0;
00094 m_standalone = ( parent == NULL );
00095
00096 setToolBarsMovable(
false);
00097 init();
00098
00099
if (m_standalone)
00100 {
00101 setCaption(i18n(
"No Printer"));
00102 KConfig *conf = KMFactory::self()->printConfig();
00103
QSize defSize( 550, 250 );
00104 conf->setGroup(
"Jobs" );
00105 resize( conf->readSizeEntry(
"Size", &defSize ) );
00106 }
00107 }
00108
00109 KMJobViewer::~KMJobViewer()
00110 {
00111
if (m_standalone)
00112 {
00113 kdDebug( 500 ) <<
"Destroying stand-alone job viewer window" << endl;
00114 KConfig *conf = KMFactory::self()->printConfig();
00115 conf->setGroup(
"Jobs" );
00116 conf->writeEntry(
"Size", size() );
00117 emit viewerDestroyed(
this);
00118 }
00119 removeFromManager();
00120 }
00121
00122
void KMJobViewer::setPrinter(KMPrinter *p)
00123 {
00124 setPrinter((p ? p->printerName() :
QString::null));
00125 }
00126
00127
void KMJobViewer::setPrinter(
const QString& prname)
00128 {
00129
00130
00131
00132
00133
if (m_prname != prname)
00134 {
00135 removeFromManager();
00136 m_prname = prname;
00137 addToManager();
00138 m_view->setAcceptDrops( prname != i18n(
"All Printers" ) );
00139 }
00140 triggerRefresh();
00141 }
00142
00143
void KMJobViewer::updateCaption()
00144 {
00145
if (!m_standalone)
00146
return;
00147
00148
QString pixname(
"fileprint");
00149
if (!m_prname.isEmpty())
00150 {
00151 setCaption(i18n(
"Print Jobs for %1").arg(m_prname));
00152 KMPrinter *prt = KMManager::self()->findPrinter(m_prname);
00153
if (prt)
00154 pixname = prt->pixmap();
00155 }
00156
else
00157 {
00158 setCaption(i18n(
"No Printer"));
00159 }
00160 KWin::setIcons(winId(), DesktopIcon(pixname), SmallIcon(pixname));
00161 }
00162
00163
void KMJobViewer::updateStatusBar()
00164 {
00165
if (!m_standalone)
00166
return;
00167
00168
int limit = m_manager->limit();
00169
if (limit == 0)
00170 statusBar()->changeItem(i18n(
"Max.: %1").arg(i18n(
"Unlimited")), 0);
00171
else
00172 statusBar()->changeItem(i18n(
"Max.: %1").arg(limit), 0);
00173 }
00174
00175
void KMJobViewer::addToManager()
00176 {
00177
if (m_prname == i18n(
"All Printers"))
00178 {
00179 loadPrinters();
00180
QPtrListIterator<KMPrinter> it(m_printers);
00181
for (; it.
current(); ++it)
00182 m_manager->addPrinter(it.
current()->printerName(), (KMJobManager::JobType)m_type, it.
current()->isSpecial());
00183 }
00184
else if (!m_prname.isEmpty())
00185 {
00186 KMPrinter *prt = KMManager::self()->findPrinter( m_prname );
00187
bool isSpecial = ( prt ? prt->isSpecial() : false );
00188 m_manager->addPrinter(m_prname, (KMJobManager::JobType)m_type, isSpecial);
00189 }
00190 }
00191
00192
void KMJobViewer::removeFromManager()
00193 {
00194
if (m_prname == i18n(
"All Printers"))
00195 {
00196
QPtrListIterator<KMPrinter> it(m_printers);
00197
for (; it.
current(); ++it)
00198 m_manager->removePrinter(it.
current()->printerName(), (KMJobManager::JobType)m_type);
00199 }
00200
else if (!m_prname.isEmpty())
00201 {
00202 m_manager->removePrinter(m_prname, (KMJobManager::JobType)m_type);
00203 }
00204 }
00205
00206
void KMJobViewer::refresh(
bool reload)
00207 {
00208 m_jobs.clear();
00209
QPtrListIterator<KMJob> it(m_manager->jobList(reload));
00210
bool all = (m_prname == i18n(
"All Printers")), active = (m_type == KMJobManager::ActiveJobs);
00211
for (; it.
current(); ++it)
00212
if ((all || it.
current()->printer() == m_prname)
00213 && ((it.
current()->state() >= KMJob::Cancelled && !active)
00214 || (it.
current()->state() < KMJob::Cancelled && active))
00215 && (m_username.isEmpty() || m_username == it.
current()->owner()))
00216 m_jobs.append(it.
current());
00217 updateJobs();
00218
00219
00220
00221 updateCaption();
00222
00223 updateStatusBar();
00224
00225
00226
00227 emit jobsShown(
this, (m_jobs.count() != 0));
00228 }
00229
00230
void KMJobViewer::init()
00231 {
00232
if (!m_view)
00233 {
00234 m_view =
new KJobListView(
this);
00235 m_view->addColumn(i18n(
"Job ID"));
00236 m_view->addColumn(i18n(
"Owner"));
00237 m_view->addColumn(i18n(
"Name"), 150);
00238 m_view->addColumn(i18n(
"Status",
"State"));
00239 m_view->addColumn(i18n(
"Size (KB)"));
00240 m_view->addColumn(i18n(
"Page(s)"));
00241 m_view->setColumnAlignment(5,Qt::AlignRight|Qt::AlignVCenter);
00242 connect( m_view, SIGNAL( dropped(
QDropEvent*,
QListViewItem* ) ), SLOT( slotDropped(
QDropEvent*,
QListViewItem* ) ) );
00243
00244
00245 KMFactory::self()->uiManager()->setupJobViewer(m_view);
00246 m_view->setFrameStyle(QFrame::WinPanel|QFrame::Sunken);
00247 m_view->setLineWidth(1);
00248 m_view->setSorting(0);
00249 m_view->setAllColumnsShowFocus(
true);
00250 m_view->setSelectionMode(QListView::Extended);
00251 connect(m_view,SIGNAL(selectionChanged()),SLOT(slotSelectionChanged()));
00252 connect(m_view,SIGNAL(rightButtonPressed(
QListViewItem*,
const QPoint&,
int)),SLOT(slotRightClicked(
QListViewItem*,
const QPoint&,
int)));
00253 setCentralWidget(m_view);
00254 }
00255
00256 initActions();
00257 }
00258
00259
void KMJobViewer::initActions()
00260 {
00261
00262 KAction *hact =
new KAction(i18n(
"&Hold"),
"stop",0,
this,SLOT(slotHold()),actionCollection(),
"job_hold");
00263 KAction *ract =
new KAction(i18n(
"&Resume"),
"run",0,
this,SLOT(slotResume()),actionCollection(),
"job_resume");
00264 KAction *dact =
new KAction(i18n(
"Remo&ve"),
"edittrash",Qt::Key_Delete,
this,SLOT(slotRemove()),actionCollection(),
"job_remove");
00265 KAction *sact =
new KAction(i18n(
"Res&tart"),
"redo",0,
this,SLOT(slotRestart()),actionCollection(),
"job_restart");
00266 KActionMenu *mact =
new KActionMenu(i18n(
"&Move to Printer"),
"fileprint",actionCollection(),
"job_move");
00267 mact->setDelayed(
false);
00268 connect(mact->popupMenu(),SIGNAL(activated(
int)),SLOT(slotMove(
int)));
00269 connect(mact->popupMenu(),SIGNAL(aboutToShow()),KMTimer::self(),SLOT(hold()));
00270 connect(mact->popupMenu(),SIGNAL(aboutToHide()),KMTimer::self(),SLOT(release()));
00271 connect(mact->popupMenu(),SIGNAL(aboutToShow()),SLOT(slotShowMoveMenu()));
00272 KToggleAction *tact =
new KToggleAction(i18n(
"&Toggle Completed Jobs"),
"history",0,actionCollection(),
"view_completed");
00273 tact->setEnabled(m_manager->actions() & KMJob::ShowCompleted);
00274 connect(tact,SIGNAL(toggled(
bool)),SLOT(slotShowCompleted(
bool)));
00275 KToggleAction *uact =
new KToggleAction(i18n(
"Show Only User Jobs"),
"personal", 0, actionCollection(),
"view_user_jobs");
00276 uact->setCheckedState(KGuiItem(i18n(
"Hide Only User Jobs"),
"personal"));
00277 connect(uact, SIGNAL(toggled(
bool)), SLOT(slotUserOnly(
bool)));
00278 m_userfield =
new QLineEdit(0);
00279 m_userfield->setText(getenv(
"USER"));
00280 connect(m_userfield, SIGNAL(returnPressed()), SLOT(slotUserChanged()));
00281 connect(uact, SIGNAL(toggled(
bool)), m_userfield, SLOT(setEnabled(
bool)));
00282 m_userfield->setEnabled(
false);
00283 m_userfield->setSizePolicy(
QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
00284 KWidgetAction *ufact =
new KWidgetAction(m_userfield, i18n(
"User Name"), 0, 0, 0, actionCollection(),
"view_username");
00285
00286
if (!m_pop)
00287 {
00288 m_pop =
new QPopupMenu(
this);
00289 connect(m_pop,SIGNAL(aboutToShow()),KMTimer::self(),SLOT(hold()));
00290 connect(m_pop,SIGNAL(aboutToHide()),KMTimer::self(),SLOT(release()));
00291 hact->plug(m_pop);
00292 ract->plug(m_pop);
00293 m_pop->insertSeparator();
00294 dact->plug(m_pop);
00295 mact->plug(m_pop);
00296 m_pop->insertSeparator();
00297 sact->plug(m_pop);
00298 }
00299
00300
00301 KActionMenu *fact =
new KActionMenu(i18n(
"&Select Printer"),
"kdeprint_printer", actionCollection(),
"filter_modify");
00302 fact->setDelayed(
false);
00303 connect(fact->popupMenu(),SIGNAL(activated(
int)),SLOT(slotPrinterSelected(
int)));
00304 connect(fact->popupMenu(),SIGNAL(aboutToShow()),KMTimer::self(),SLOT(hold()));
00305 connect(fact->popupMenu(),SIGNAL(aboutToHide()),KMTimer::self(),SLOT(release()));
00306 connect(fact->popupMenu(),SIGNAL(aboutToShow()),SLOT(slotShowPrinterMenu()));
00307
00308
if (!m_standalone)
00309 {
00310 KToolBar *toolbar = toolBar();
00311 hact->plug(toolbar);
00312 ract->plug(toolbar);
00313 toolbar->insertSeparator();
00314 dact->plug(toolbar);
00315 mact->plug(toolbar);
00316 toolbar->insertSeparator();
00317 sact->plug(toolbar);
00318 toolbar->insertSeparator();
00319 tact->plug(toolbar);
00320 uact->plug(toolbar);
00321 ufact->plug(toolbar);
00322 }
00323
else
00324 {
00325 KStdAction::quit(kapp,SLOT(quit()),actionCollection());
00326 KStdAction::close(
this,SLOT(slotClose()),actionCollection());
00327 KStdAction::preferences(
this, SLOT(slotConfigure()), actionCollection());
00328
00329
00330
new KAction(i18n(
"Refresh"),
"reload",0,
this,SLOT(slotRefresh()),actionCollection(),
"refresh");
00331
00332
00333 KStatusBar *statusbar = statusBar();
00334 m_stickybox =
new QCheckBox( i18n(
"Keep window permanent" ), statusbar );
00335 statusbar->addWidget( m_stickybox, 1,
false );
00336 statusbar->insertItem(
" " + i18n(
"Max.: %1").arg(i18n(
"Unlimited"))+
" ", 0, 0,
true);
00337 statusbar->setItemFixed(0);
00338 updateStatusBar();
00339
00340 createGUI();
00341 }
00342
00343 loadPluginActions();
00344 slotSelectionChanged();
00345 }
00346
00347
void KMJobViewer::buildPrinterMenu(QPopupMenu *menu,
bool use_all,
bool use_specials)
00348 {
00349 loadPrinters();
00350 menu->
clear();
00351
00352
QPtrListIterator<KMPrinter> it(m_printers);
00353
int i(0);
00354
if (use_all)
00355 {
00356 menu->
insertItem(SmallIcon(
"fileprint"), i18n(
"All Printers"), i++);
00357 menu->
insertSeparator();
00358 }
00359
for (; it.
current(); ++it, i++)
00360 {
00361
if ( !it.
current()->instanceName().isEmpty() ||
00362 ( it.
current()->isSpecial() && !use_specials ) )
00363
continue;
00364 menu->
insertItem(SmallIcon(it.
current()->pixmap()), it.
current()->printerName(), i);
00365 }
00366 }
00367
00368
void KMJobViewer::slotShowMoveMenu()
00369 {
00370 QPopupMenu *menu = static_cast<KActionMenu*>(actionCollection()->action(
"job_move"))->popupMenu();
00371 buildPrinterMenu(menu,
false,
false);
00372 }
00373
00374
void KMJobViewer::slotShowPrinterMenu()
00375 {
00376 QPopupMenu *menu = static_cast<KActionMenu*>(actionCollection()->action(
"filter_modify"))->popupMenu();
00377 buildPrinterMenu(menu,
true,
true);
00378 }
00379
00380
void KMJobViewer::updateJobs()
00381 {
00382
QPtrListIterator<JobItem> jit(m_items);
00383
for (;jit.
current();++jit)
00384 jit.
current()->setDiscarded(
true);
00385
00386
QPtrListIterator<KMJob> it(m_jobs);
00387
for (;it.
current();++it)
00388 {
00389 KMJob *j(it.
current());
00390 JobItem *item = findItem(j->uri());
00391
if (item)
00392 {
00393 item->setDiscarded(
false);
00394 item->init(j);
00395 }
00396
else
00397 m_items.append(
new JobItem(m_view,j));
00398 }
00399
00400
for (uint i=0; i<m_items.count(); i++)
00401
if (m_items.at(i)->isDiscarded())
00402 {
00403
delete m_items.take(i);
00404 i--;
00405 }
00406
00407 slotSelectionChanged();
00408 }
00409
00410 JobItem* KMJobViewer::findItem(
const QString& uri)
00411 {
00412
QPtrListIterator<JobItem> it(m_items);
00413
for (;it.
current();++it)
00414
if (it.
current()->jobUri() == uri)
return it.
current();
00415
return 0;
00416 }
00417
00418
void KMJobViewer::slotSelectionChanged()
00419 {
00420
int acts = m_manager->actions();
00421
int state(-1);
00422
int thread(0);
00423
bool completed(
true), remote(
false);
00424
00425
QPtrListIterator<JobItem> it(m_items);
00426
QPtrList<KMJob> joblist;
00427
00428 joblist.
setAutoDelete(
false);
00429
for (;it.
current();++it)
00430 {
00431
if (it.
current()->isSelected())
00432 {
00433
00434
00435
00436
00437
00438
if (it.
current()->job()->type() == KMJob::Threaded) thread |= 0x1;
00439
else thread |= 0x2;
00440
00441
if (state == -1) state = it.
current()->job()->state();
00442
else if (state != 0 && state != it.
current()->job()->state()) state = 0;
00443
00444 completed = (completed && it.
current()->job()->isCompleted());
00445 joblist.
append(it.
current()->job());
00446
if (it.
current()->job()->isRemote())
00447 remote =
true;
00448 }
00449 }
00450
if (thread != 2)
00451 joblist.
clear();
00452
00453 actionCollection()->action(
"job_remove")->setEnabled((thread == 1) || ( !completed && (state >= 0) && (acts & KMJob::Remove)));
00454 actionCollection()->action(
"job_hold")->setEnabled( !completed && (thread == 2) && (state > 0) && (state != KMJob::Held) && (acts & KMJob::Hold));
00455 actionCollection()->action(
"job_resume")->setEnabled( !completed && (thread == 2) && (state > 0) && (state == KMJob::Held) && (acts & KMJob::Resume));
00456 actionCollection()->action(
"job_move")->setEnabled(!remote && !completed && (thread == 2) && (state >= 0) && (acts & KMJob::Move));
00457 actionCollection()->action(
"job_restart")->setEnabled(!remote && (thread == 2) && (state >= 0) && (completed) && (acts & KMJob::Restart));
00458
00459 m_manager->validatePluginActions(actionCollection(), joblist);
00460 }
00461
00462
void KMJobViewer::jobSelection(
QPtrList<KMJob>& l)
00463 {
00464 l.
setAutoDelete(
false);
00465
QPtrListIterator<JobItem> it(m_items);
00466
for (;it.
current();++it)
00467
if (it.
current()->isSelected())
00468 l.
append(it.
current()->job());
00469 }
00470
00471
void KMJobViewer::send(
int cmd,
const QString& name,
const QString& arg)
00472 {
00473 KMTimer::self()->hold();
00474
00475
QPtrList<KMJob> l;
00476 jobSelection(l);
00477
if (!m_manager->sendCommand(l,cmd,arg))
00478 {
00479 KMessageBox::error(
this,
"<qt>"+i18n(
"Unable to perform action \"%1\" on selected jobs. Error received from manager:").arg(name)+
"<p>"+KMManager::self()->errorMsg()+
"</p></qt>");
00480
00481 KMManager::self()->setErrorMsg(QString::null);
00482 }
00483
00484 triggerRefresh();
00485
00486 KMTimer::self()->release();
00487 }
00488
00489
void KMJobViewer::slotHold()
00490 {
00491 send(KMJob::Hold,i18n(
"Hold"));
00492 }
00493
00494
void KMJobViewer::slotResume()
00495 {
00496 send(KMJob::Resume,i18n(
"Resume"));
00497 }
00498
00499
void KMJobViewer::slotRemove()
00500 {
00501 send(KMJob::Remove,i18n(
"Remove"));
00502 }
00503
00504
void KMJobViewer::slotRestart()
00505 {
00506 send(KMJob::Restart,i18n(
"Restart"));
00507 }
00508
00509
void KMJobViewer::slotMove(
int prID)
00510 {
00511
if (prID >= 0 && prID < (
int)(m_printers.count()))
00512 {
00513 KMPrinter *p = m_printers.at(prID);
00514 send(KMJob::Move,i18n(
"Move to %1").arg(p->printerName()),p->printerName());
00515 }
00516 }
00517
00518
void KMJobViewer::slotRightClicked(
QListViewItem*,
const QPoint& p,
int)
00519 {
00520
if (m_pop) m_pop->popup(p);
00521 }
00522
00523
void KMJobViewer::loadPrinters()
00524 {
00525 m_printers.clear();
00526
00527
00528
QPtrListIterator<KMPrinter> it(*(KMFactory::self()->manager()->printerList(
false)));
00529
for (;it.
current();++it)
00530 {
00531
00532
if ((it.
current()->isPrinter() || it.
current()->isClass(
false) ||
00533 ( it.
current()->isSpecial() && it.
current()->isValid() ) )
00534 && (it.
current()->name() == it.
current()->printerName()))
00535 m_printers.append(it.
current());
00536 }
00537 }
00538
00539
void KMJobViewer::slotPrinterSelected(
int prID)
00540 {
00541
if (prID >= 0 && prID < (
int)(m_printers.count()+1))
00542 {
00543
QString prname = (prID == 0 ? i18n(
"All Printers") : m_printers.at(prID-1)->printerName());
00544 emit printerChanged(
this, prname);
00545 }
00546 }
00547
00548
void KMJobViewer::slotRefresh()
00549 {
00550 triggerRefresh();
00551 }
00552
00553
void KMJobViewer::triggerRefresh()
00554 {
00555
00556
00557
00558
00559
if (!m_standalone)
00560 refresh(
true);
00561
else
00562 emit refreshClicked();
00563 }
00564
00565
void KMJobViewer::slotShowCompleted(
bool on)
00566 {
00567 removeFromManager();
00568 m_type = (on ? KMJobManager::CompletedJobs : KMJobManager::ActiveJobs);
00569 addToManager();
00570 triggerRefresh();
00571 }
00572
00573
void KMJobViewer::slotClose()
00574 {
00575
delete this;
00576 }
00577
00578
void KMJobViewer::loadPluginActions()
00579 {
00580
int mpopindex(7), toolbarindex(!m_standalone?7:8), menuindex(7);
00581
QMenuData *menu(0);
00582
00583
if (m_standalone)
00584 {
00585
00586 KAction *act = actionCollection()->action(
"job_restart");
00587
for (
int i=0;i<act->containerCount();i++)
00588 {
00589
if (menuBar()->findItem(act->itemId(i), &menu))
00590 {
00591 menuindex = mpopindex = menu->
indexOf(act->itemId(i))+1;
00592
break;
00593 }
00594 }
00595 }
00596
00597
QValueList<KAction*> acts = m_manager->createPluginActions(actionCollection());
00598
for (
QValueListIterator<KAction*> it=acts.
begin(); it!=acts.
end(); ++it)
00599 {
00600
00601 connect((*it), SIGNAL(activated(
int)), SLOT(pluginActionActivated(
int)));
00602
00603
00604 (*it)->plug(toolBar(), toolbarindex++);
00605
if (m_pop)
00606 (*it)->plug(m_pop, mpopindex++);
00607
if (menu)
00608 (*it)->plug(static_cast<QPopupMenu*>(menu), menuindex++);
00609 }
00610 }
00611
00612
void KMJobViewer::removePluginActions()
00613 {
00614
QValueList<KAction*> acts = actionCollection()->actions(
"plugin");
00615
for (
QValueListIterator<KAction*> it=acts.
begin(); it!=acts.
end(); ++it)
00616 {
00617 (*it)->unplugAll();
00618
delete (*it);
00619 }
00620 }
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631
00632
00633
00634
void KMJobViewer::reload()
00635 {
00636 removePluginActions();
00637 loadPluginActions();
00638
00639
00640
00641 addToManager();
00642
00643
00644
00645
00646
00647
for (
int c=m_view->columns()-1; c>5; c--)
00648 m_view->removeColumn(c);
00649 KMFactory::self()->uiManager()->setupJobViewer(m_view);
00650
00651
00652 actionCollection()->action(
"view_completed")->setEnabled(m_manager->actions() & KMJob::ShowCompleted);
00653 static_cast<KToggleAction*>(actionCollection()->action(
"view_completed"))->setChecked(
false);
00654 }
00655
00656
void KMJobViewer::closeEvent(
QCloseEvent *e)
00657 {
00658
if (m_standalone)
00659 {
00660 hide();
00661 e->
ignore();
00662 }
00663
else
00664 e->
accept();
00665 }
00666
00667
void KMJobViewer::pluginActionActivated(
int ID)
00668 {
00669 KMTimer::self()->hold();
00670
00671
QPtrList<KMJob> joblist;
00672 jobSelection(joblist);
00673
if (!m_manager->doPluginAction(ID, joblist))
00674 KMessageBox::error(
this,
"<qt>"+i18n(
"Operation failed.")+
"<p>"+KMManager::self()->errorMsg()+
"</p></qt>");
00675
00676 triggerRefresh();
00677 KMTimer::self()->release();
00678 }
00679
00680
void KMJobViewer::slotUserOnly(
bool on)
00681 {
00682 m_username = (on ? m_userfield->text() :
QString::null);
00683 refresh(
false);
00684 }
00685
00686
void KMJobViewer::slotUserChanged()
00687 {
00688
if (m_userfield->isEnabled())
00689 {
00690 m_username = m_userfield->text();
00691 refresh(
false);
00692 }
00693 }
00694
00695
void KMJobViewer::slotConfigure()
00696 {
00697 KMTimer::self()->hold();
00698
00699 KDialogBase dlg(
this, 0,
true, i18n(
"Print Job Settings"), KDialogBase::Ok|KDialogBase::Cancel);
00700 KMConfigJobs *w =
new KMConfigJobs(&dlg);
00701 dlg.setMainWidget(w);
00702 dlg.resize(300, 10);
00703 KConfig *conf = KMFactory::self()->printConfig();
00704 w->loadConfig(conf);
00705
if (dlg.exec())
00706 {
00707 w->saveConfig(conf);
00708 updateStatusBar();
00709 refresh(
true);
00710 }
00711
00712 KMTimer::self()->release();
00713 }
00714
00715
bool KMJobViewer::isSticky()
const
00716
{
00717
return ( m_stickybox ? m_stickybox->isChecked() : false );
00718 }
00719
00720
void KMJobViewer::slotDropped(
QDropEvent *e,
QListViewItem* )
00721 {
00722
QStringList files;
00723
QString target;
00724
00725 KURL::List uris;
00726 KURLDrag::decode( e, uris );
00727
for ( KURL::List::ConstIterator it = uris.begin();
00728 it != uris.end(); ++it)
00729 {
00730
if ( KIO::NetAccess::download( *it, target, 0 ) )
00731 files << target;
00732 }
00733
00734
if ( files.count() > 0 )
00735 {
00736
KPrinter prt;
00737
if ( prt.
autoConfigure( m_prname,
this ) )
00738 prt.
printFiles( files,
false,
false );
00739 }
00740 }
00741
00742
#include "kmjobviewer.moc"