diff options
Diffstat (limited to 'kdeprint/kmuimanager.cpp')
-rw-r--r-- | kdeprint/kmuimanager.cpp | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/kdeprint/kmuimanager.cpp b/kdeprint/kmuimanager.cpp new file mode 100644 index 000000000..96573fb3d --- /dev/null +++ b/kdeprint/kmuimanager.cpp @@ -0,0 +1,201 @@ +/* + * 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 <config.h> + +#include "kmuimanager.h" +#include "kprintdialog.h" +#include "kprintdialogpage.h" +#include "kpcopiespage.h" +#include "kprinter.h" +#include "kprinterpropertydialog.h" +#include "kmfactory.h" +#include "kmmanager.h" +#include "kmprinter.h" +#include "kpdriverpage.h" +#include "kpmarginpage.h" +#include "kpqtpage.h" +#include "kpfilterpage.h" +#include "kpfileselectpage.h" +#include "kxmlcommand.h" +#include "kpposterpage.h" + +#include <klocale.h> +#include <kdebug.h> + +KMUiManager::KMUiManager(QObject *parent, const char *name) +: QObject(parent,name) +{ + m_printdialogflags = KMUiManager::PrintDialogAll; + m_printdialogpages.setAutoDelete(false); +} + +KMUiManager::~KMUiManager() +{ +} + +void KMUiManager::setupPropertyPages(KMPropertyPage*) +{ +} + +void KMUiManager::setupWizard(KMWizard*) +{ +} + +void KMUiManager::setupConfigDialog(KMConfigDialog*) +{ +} + +int KMUiManager::copyFlags(KPrinter *pr, bool usePlugin) +{ + int fl(0), pcap(pluginPageCap()); + if (KMFactory::self()->settings()->pageSelection == KPrinter::ApplicationSide) + { + if (pr) + { + if (pr->currentPage() > 0) fl |= Current; + if (pr->minPage() > 0 && pr->maxPage() > 0) + fl |= (Range|PageSet|Order); + } + //else fl = CopyAll; + if (usePlugin) + fl |= (pcap & (Collate|NoAutoCollate)); + else + fl |= NoAutoCollate; + } + else if (usePlugin) + // in this case, we want page capabilities with plugin, it means + // for a regular real printer. + fl = pageCap(); + else + // int this case, we want page capabilities for non standard + // printer, set auto-collate to false as copies will be handled + // by Qt + fl = systemPageCap() | NoAutoCollate; + return fl; +} + +int KMUiManager::dialogFlags() +{ + int f = m_printdialogflags; + int appf = KMFactory::self()->settings()->application; + if (appf != KPrinter::Dialog) + { + f &= ~(KMUiManager::Preview); + if ( appf == KPrinter::StandAlonePersistent) + f |= KMUiManager::Persistent; + } + return f; +} + +void KMUiManager::setupPrintDialog(KPrintDialog *dlg) +{ + // dialog flags + int f = dialogFlags(); + dlg->setFlags(f); + + // add standard dialog pages + int stdpages = KMFactory::self()->settings()->standardDialogPages; + if (stdpages & KPrinter::CopiesPage) + m_printdialogpages.prepend(new KPCopiesPage(dlg->printer(), 0, "CopiesPage")); + if (stdpages & KPrinter::FilesPage) + m_printdialogpages.prepend(new KPFileSelectPage(0, "FileSelectPage")); + + // add plugins pages + setupPrintDialogPages(&m_printdialogpages); + + dlg->setDialogPages(&m_printdialogpages); +} + +void KMUiManager::setupPropertyDialog(KPrinterPropertyDialog *dlg) +{ + if (dlg->printer()) + { + DrMain *driver = KMManager::self()->loadDriver(dlg->printer(), false); + dlg->setDriver(driver); + + if (dlg->printer()->isSpecial()) + { // special case + dlg->addPage(new KPQtPage(dlg,"QtPage")); + //dlg->enableSaveButton(false); + } + else + { + // add pages specific to print system + setupPrinterPropertyDialog(dlg); + } + + // retrieve the KPrinter object + KPrinter *prt(0); + if (dlg->parent() && dlg->parent()->isA("KPrintDialog")) + prt = static_cast<KPrintDialog*>(dlg->parent())->printer(); + + // add margin page + if ( ( prt && !prt->fullPage() && prt->applicationType() == KPrinter::Dialog ) + || prt->applicationType() < 0 ) + dlg->addPage(new KPMarginPage(prt, driver, dlg, "MarginPage")); + + // add driver page + if (driver) + dlg->addPage(new KPDriverPage(dlg->printer(),driver,dlg,"DriverPage")); + + dlg->setCaption(i18n("Configuration of %1").arg(dlg->printer()->name())); + if ( KXmlCommandManager::self()->checkCommand( "poster", KXmlCommandManager::None, KXmlCommandManager::None ) ) + dlg->addPage( new KPPosterPage( dlg, "PosterPage" ) ); + dlg->addPage(new KPFilterPage(dlg,"FilterPage")); + dlg->resize(100,100); + } +} + +void KMUiManager::setupPrinterPropertyDialog(KPrinterPropertyDialog *dlg) +{ + if (KMFactory::self()->settings()->application == KPrinter::Dialog + || KMFactory::self()->settings()->application < 0 ) + dlg->addPage(new KPQtPage(dlg,"QtPage")); +} + +int KMUiManager::pageCap() +{ + int val = systemPageCap(); + val |= pluginPageCap(); + return val; +} + +int KMUiManager::systemPageCap() +{ + int val(0); + if (KXmlCommandManager::self()->checkCommand("psselect")) + val |= KMUiManager::PSSelect; + return val; +} + +int KMUiManager::pluginPageCap() +{ + return 0; +} + +void KMUiManager::setupPrintDialogPages(QPtrList<KPrintDialogPage>*) +{ +} + +void KMUiManager::setupJobViewer(QListView*) +{ +} + +#include "kmuimanager.moc" |