20#include "kexisimpleprintingpagesetup.h"
21#include "kexisimpleprintingpagesetupbase.h"
22#include "kexisimpleprintpreviewwindow.h"
24#include <core/keximainwindow.h>
25#include <kexiutils/utils.h>
26#include <kexi_version.h>
28#include <tdeapplication.h>
29#include <kiconloader.h>
31#include <tdefontdialog.h>
36#include <kpushbutton.h>
37#include <tdeversion.h>
43#include <tqcheckbox.h>
44#include <tqwhatsthis.h>
47#include <kexiutils/tristate.h>
49KexiSimplePrintingCommand::KexiSimplePrintingCommand(
51 : TQObject(parent, "KexiSimplePrintCommand")
54 , m_objectId(objectId)
56 , m_printPreviewNeedsReloading(false)
62KexiSimplePrintingCommand::~KexiSimplePrintingCommand()
64 delete m_previewWindow;
65 delete m_previewEngine;
71 const TQString& aTitleText)
73 m_settings = settings;
74 return print(aTitleText);
77bool KexiSimplePrintingCommand::print( const TQString& aTitleText)
81 if (!tableOrQuery. table() && !tableOrQuery. query()) {
85 TQString titleText(aTitleText.stripWhiteSpace());
86 if (titleText.isEmpty())
90 TQString errorMessage;
91 if (!engine. init(*conn, tableOrQuery, titleText, errorMessage)) {
92 if (!errorMessage.isEmpty())
93 KMessageBox::sorry(m_mainWin, errorMessage, i18n( "Printing"));
99 TQPrinter printer(TQPrinter::HighResolution);
100 printer.setOrientation( m_settings.pageLayout.orientation == PG_PORTRAIT
101 ? TQPrinter::Portrait : TQPrinter::Landscape );
103 (TQPrinter::PageSize)KoPageFormat::printerPageSize( m_settings.pageLayout.format ) );
108 printer.setFromTo(1,1);
111 printer.setOrientation( m_settings.pageLayout.orientation == PG_PORTRAIT
112 ? KPrinter::Portrait : KPrinter::Landscape );
114 (KPrinter::PageSize)KoPageFormat::printerPageSize( m_settings.pageLayout.format ) );
117 printer.setFullPage( true);
118 TQString docName( titleText );
119 printer.setDocName( docName );
120 printer.setCreator(KEXI_APP_NAME);
121 if ( !printer.setup( m_mainWin ) ) {
130 if (!painter.begin(&printer)) {
136 uint loops, loopsPerPage;
137 TQValueList<int> pagesToPrint;
141 if (TQPrinter::PageRange == printer.printRange()) {
142 fromPage = printer.fromPage();
143 toPage = printer.toPage();
145 if (fromPage==0 || toPage==0) {
156 for ( int i = fromPage; i<=toPage; i++) {
157 pagesToPrint.append(i);
161 loopsPerPage = printer.collateCopies() ? 1 : printer.numCopies();
164 pagesToPrint = printer.pageList();
165 kdDebug() << pagesToPrint << endl;
166 if (pagesToPrint.isEmpty()) {
168 for ( int i = 0; i<(int)engine. pagesCount(); i++) {
169 pagesToPrint.append(i);
173 fromPage = pagesToPrint.first();
174 if (printer.collate()==KPrinter::Collate) {
176 loops = printer.numCopies();
182 loopsPerPage = printer.numCopies();
188 kdDebug() << "printing..." << endl;
189 bool firstPage = true;
190 for (uint copy = 0;copy < loops; copy++) {
191 kdDebug() << "copy " << (copy+1) << " of " << loops << endl;
192 uint pageNumber = fromPage;
193 TQValueList<int>::ConstIterator pagesIt = pagesToPrint.constBegin();
194 for(;(int)pageNumber == fromPage || !engine. eof(); ++pageNumber) {
195 kdDebug() << "printing..." << endl;
196 if (pagesIt == pagesToPrint.constEnd())
198 if (( int)pageNumber < *pagesIt) {
199 engine. paintPage(pageNumber, painter, false);
202 if (*pagesIt < ( int)pageNumber) {
206 for (uint onePageCounter = 0; onePageCounter < loopsPerPage; onePageCounter++) {
211 kdDebug() << "page #" << pageNumber << endl;
217 kdDebug() << "end of printing." << endl;
230 const TQString& aTitleText, bool reload)
232 m_settings = settings;
233 if (!m_previewEngine)
237 m_printPreviewNeedsReloading = true;
239 bool backToPage0 = true;
240 TQString titleText(aTitleText.stripWhiteSpace());
243 if (!tableOrQuery. table() && !tableOrQuery. query()) {
247 if (titleText.isEmpty())
249 if (!m_previewWindow || m_printPreviewNeedsReloading) {
250 TQString errorMessage;
251 if (!m_previewEngine-> init(
252 *conn, tableOrQuery, titleText, errorMessage)) {
253 if (!errorMessage.isEmpty())
254 KMessageBox::sorry(m_mainWin, errorMessage, i18n( "Print Preview"));
258 if (!m_previewWindow) {
262 TQt::WStyle_Customize|TQt::WStyle_NormalBorder|TQt::WStyle_Title|
263 TQt::WStyle_SysMenu|TQt::WStyle_MinMax|TQt::WStyle_ContextHelp);
264 connect(m_previewWindow, TQ_SIGNAL(printRequested()), this, TQ_SLOT(print()));
265 connect(m_previewWindow, TQ_SIGNAL(pageSetupRequested()), this, TQ_SLOT(slotShowPageSetupRequested()));
266 m_previewWindow->show();
267 KDialog::centerOnScreen(m_previewWindow);
268 m_printPreviewNeedsReloading = false;
271 if (m_printPreviewNeedsReloading) {
272 m_previewEngine->clear();
274 m_previewEngine->setTitleText( titleText );
275 m_previewWindow->setFullWidth();
276 m_previewWindow->updatePagesCount();
277 m_printPreviewNeedsReloading = false;
280 m_previewWindow->goToPage(0);
281 m_previewWindow->show();
282 m_previewWindow->raise();
287void KexiSimplePrintingCommand::slotShowPageSetupRequested()
301 TQMap<TQString,TQString>* args )
302 : KexiViewBase( mainWin, parent, "KexiSimplePrintingPageSetup" )
310 objectId = (*args)[ "identifier"].toInt();
315 bool printPreview = false;
317 bool pageSetup = false;
319 printPreview = (*args)[ "action"]== "printPreview";
320 print = (*args)[ "action"]== "print";
321 pageSetup = (*args)[ "action"]== "pageSetup";
322 ok = printPreview || print || pageSetup;
327 m_unit = TDELocale::Metric == TDEGlobal::locale()->measureSystem() ? KoUnit::U_CM : KoUnit::U_INCH;
330 TQVBoxLayout *lyr = new TQVBoxLayout( this);
331 m_contents = new KexiSimplePrintingPageSetupBase( this, "KexiSimplePrintingPageSetupBase");
332 lyr->addWidget(m_contents);
334 setViewWidget(m_contents, true);
336 m_contents->setFocusProxy(m_contents->headerTitleLineEdit);
338 m_contents->printButton->setIconSet( KStdGuiItem::print().iconSet(TDEIcon::Small) );
339 m_contents->printButton->setText( KStdGuiItem::print().text() );
340 connect(m_contents->printButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(print()));
342 m_contents->printPreviewButton->setIconSet( SmallIconSet( "document-print-preview") );
343 m_contents->printPreviewButton->setText( i18n( "Print Previe&w...") );
344 connect(m_contents->printPreviewButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(printPreview()));
346 m_contents->iconLabel->setFixedWidth(32+6);
347 m_contents->iconLabel->setPixmap( DesktopIcon( "text-x-generic", 32) );
348 TQWhatsThis::add(m_contents->headerTitleFontButton, i18n( "Changes font for title text."));
349 connect(m_contents->headerTitleFontButton, TQ_SIGNAL(clicked()),
350 this, TQ_SLOT(slotChangeTitleFont()));
353 m_origCaptionLabelText = m_contents->captionLabel->text();
354 m_contents->headerTitleLineEdit->setText( m_item-> captionOrName() );
355 if (m_item->mimeType()== "kexi/query") {
356 m_contents->openDataLink->setText( i18n( "Open This Query") );
357 m_origCaptionLabelText = i18n( "<h2>Page setup for printing \"%1\" query data</h2>");
359 m_contents->captionLabel->setText( m_origCaptionLabelText.arg(m_item->name()) );
361 connect(m_contents->headerTitleLineEdit,TQ_SIGNAL(textChanged( const TQString&)),
362 this, TQ_SLOT(slotTitleTextChanged( const TQString&)));
363 m_contents->headerTitleLineEdit->setFont( m_settings.pageTitleFont );
365 TQWhatsThis::add(m_contents->openDataLink,
366 i18n( "Shows data for table or query associated with this page setup."));
367 TQToolTip::add(m_contents->openDataLink,
368 i18n( "Shows data for table or query associated with this page setup."));
369 connect(m_contents->openDataLink, TQ_SIGNAL(leftClickedURL()), this, TQ_SLOT(slotOpenData()));
371 TQWhatsThis::add(m_contents->saveSetupLink, i18n( "Saves settings for this setup as default."));
372 connect(m_contents->saveSetupLink, TQ_SIGNAL(leftClickedURL()), this, TQ_SLOT(slotSaveSetup()));
373#if !KDE_IS_VERSION(3,5,1) && !defined(TQ_WS_WIN)
375 m_contents->openDataLink->setFocusPolicy(NoFocus);
376 m_contents->saveSetupLink->setFocusPolicy(NoFocus);
379 TQWhatsThis::add(m_contents->addDateTimeCheckbox, i18n( "Adds date and time to the header."));
380 TQWhatsThis::add(m_contents->addPageNumbersCheckbox, i18n( "Adds page numbers to the footer."));
381 TQWhatsThis::add(m_contents->addTableBordersCheckbox, i18n( "Adds table borders."));
383#ifdef KEXI_NO_UNFINISHED
384 m_contents->addDateTimeCheckbox->hide();
385 m_contents->addPageNumbersCheckbox->hide();
388 updatePageLayoutAndUnitInfo();
389 TQWhatsThis::add(m_contents->changePageSizeAndMarginsButton,
390 i18n( "Changes page size and margins."));
391 connect(m_contents->changePageSizeAndMarginsButton, TQ_SIGNAL(clicked()),
392 this, TQ_SLOT(slotChangePageSizeAndMargins()));
394 connect(m_contents->addPageNumbersCheckbox, TQ_SIGNAL(toggled( bool)),
395 this, TQ_SLOT(slotAddPageNumbersCheckboxToggled( bool)));
396 connect(m_contents->addDateTimeCheckbox, TQ_SIGNAL(toggled( bool)),
397 this, TQ_SLOT(slotAddDateTimeCheckboxToggled( bool)));
398 connect(m_contents->addTableBordersCheckbox, TQ_SIGNAL(toggled( bool)),
399 this, TQ_SLOT(slotAddTableBordersCheckboxToggled( bool)));
406 m_contents->addPageNumbersCheckbox->setChecked( m_settings.addPageNumbers );
407 m_contents->addDateTimeCheckbox->setChecked( m_settings.addDateAndTime );
408 m_contents->addTableBordersCheckbox->setChecked( m_settings.addTableBorders );
414 m_printPreviewNeedsReloading = false;
424 connect( this, TQ_SIGNAL(printPreviewForItemRequested( KexiPart::Item*,
430KexiSimplePrintingPageSetup::~KexiSimplePrintingPageSetup()
434void KexiSimplePrintingPageSetup::slotSaveSetup()
440void KexiSimplePrintingPageSetup::updatePageLayoutAndUnitInfo()
443 if (m_settings.pageLayout.format == PG_CUSTOM) {
444 s += TQString( " (%1 %2 x %3 %4)")
445 .arg(m_settings.pageLayout.ptWidth).arg(KoUnit::unitName(m_unit))
446 .arg(m_settings.pageLayout.ptHeight).arg(KoUnit::unitName(m_unit));
449 s += KoPageFormat::name(m_settings.pageLayout.format);
451 + (m_settings.pageLayout.orientation == PG_PORTRAIT ? i18n( "Portrait") : i18n( "Landscape"))
452 + ", " + i18n( "margins:")
453 + " " + KoUnit::toUserStringValue(m_settings.pageLayout.ptLeft, m_unit)
454 + "/" + KoUnit::toUserStringValue(m_settings.pageLayout.ptRight, m_unit)
455 + "/" + KoUnit::toUserStringValue(m_settings.pageLayout.ptTop, m_unit)
456 + "/" + KoUnit::toUserStringValue(m_settings.pageLayout.ptBottom, m_unit)
457 + " " + KoUnit::unitName(m_unit);
458 m_contents->pageSizeAndMarginsLabel->setText( s );
469void KexiSimplePrintingPageSetup::print()
473 emit printItemRequested(m_item, m_settings, m_contents->headerTitleLineEdit->text());
476void KexiSimplePrintingPageSetup::printPreview()
480 emit printPreviewForItemRequested(m_item, m_settings,
481 m_contents->headerTitleLineEdit->text(), m_printPreviewNeedsReloading);
482 m_printPreviewNeedsReloading = false;
485void KexiSimplePrintingPageSetup::slotOpenData()
487 bool openingCancelled;
488 m_mainWin-> openObject(m_item, Kexi::DataViewMode, openingCancelled);
491void KexiSimplePrintingPageSetup::slotTitleTextChanged( const TQString&)
493 if (m_contents->headerTitleLineEdit->isModified()) {
494 m_printPreviewNeedsReloading = true;
499 m_contents->headerTitleLineEdit->clearModified();
502void KexiSimplePrintingPageSetup::slotChangeTitleFont()
504 if (TQDialog::Accepted != TDEFontDialog::getFont(m_settings.pageTitleFont, false, this))
506 m_contents->headerTitleLineEdit->setFont( m_settings.pageTitleFont );
510void KexiSimplePrintingPageSetup::slotChangePageSizeAndMargins()
514 if ( int(TQDialog::Accepted) != KoPageLayoutDia::pageLayout(
515 m_settings.pageLayout, headfoot, FORMAT_AND_BORDERS | DISABLE_UNIT, m_unit, this ))
519 updatePageLayoutAndUnitInfo();
525 m_contents->saveSetupLink->setEnabled(set);
529 m_printPreviewNeedsReloading = true;
532void KexiSimplePrintingPageSetup::slotAddPageNumbersCheckboxToggled( bool set)
534 m_settings.addPageNumbers = set;
538void KexiSimplePrintingPageSetup::slotAddDateTimeCheckboxToggled( bool set)
540 m_settings.addDateAndTime = set;
544void KexiSimplePrintingPageSetup::slotAddTableBordersCheckboxToggled( bool set)
546 m_settings.addTableBorders = set;
550#include "kexisimpleprintingpagesetup.moc"
Provides database connection, allowing queries and data modification.
QuerySchema * query() const
TableSchema * table() const
TQString captionOrName() const
Kexi's main window interface This interface is implemented by KexiMainWindowImpl class.
virtual KexiProject * project()=0 Project data of currently opened project or NULL if no project here yet.
virtual KexiDialogBase * openObject(KexiPart::Item *item, int viewMode, bool &openingCancelled, TQMap< TQString, TQString > *staticObjectArgs=0, TQString *errorMessage=0)=0 Opens object pointed by item in a view viewMode.
Information about a single object that can be instantiated using Kexi Part.
TQString captionOrName() const
KexiPart::Item * item(KexiPart::Info *i, const TQString &name)
KexiDB::Connection * dbConnection() const
A window for displaying print preview for simple printing.
bool showPrintPreview(const KexiSimplePrintingSettings &settings, const TQString &aTitleText=TQString(), bool reload=false)
void showPageSetupRequested(KexiPart::Item *item) connected to Kexi Main Window
An engine painting data on pages using TQPainter. The engine allows for random access to any page.
void paintPage(int pageNumber, TQPainter &painter, bool paint=true)
bool init(KexiDB::Connection &conn, KexiDB::TableOrQuerySchema &tableOrQuery, const TQString &titleText, TQString &errorMessage)
void calculatePagesCount(TQPainter &painter) Calculates pafe count that can be later obtained using pagesCount().
KexiSimplePrintingPageSetup(KexiMainWindow *mainWin, TQWidget *parent, TQMap< TQString, TQString > *args)
Settings data for simple printing engine.
Base class for single view embeddable of in KexiDialogBase.
KexiMainWindow * mainWin() const
|