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>
42#include <tqcheckbox.h>
43#include <tqwhatsthis.h>
46#include <kexiutils/tristate.h>
48KexiSimplePrintingCommand::KexiSimplePrintingCommand(
50 : TQObject(parent, "KexiSimplePrintCommand")
53 , m_objectId(objectId)
55 , m_printPreviewNeedsReloading(false)
61KexiSimplePrintingCommand::~KexiSimplePrintingCommand()
63 delete m_previewWindow;
64 delete m_previewEngine;
70 const TQString& aTitleText)
72 m_settings = settings;
73 return print(aTitleText);
76bool KexiSimplePrintingCommand::print( const TQString& aTitleText)
80 if (!tableOrQuery. table() && !tableOrQuery. query()) {
84 TQString titleText(aTitleText.stripWhiteSpace());
85 if (titleText.isEmpty())
89 TQString errorMessage;
90 if (!engine. init(*conn, tableOrQuery, titleText, errorMessage)) {
91 if (!errorMessage.isEmpty())
92 KMessageBox::sorry(m_mainWin, errorMessage, i18n( "Printing"));
98 TQPrinter printer(TQPrinter::HighResolution);
99 printer.setOrientation( m_settings.pageLayout.orientation == PG_PORTRAIT
100 ? TQPrinter::Portrait : TQPrinter::Landscape );
102 (TQPrinter::PageSize)KoPageFormat::printerPageSize( m_settings.pageLayout.format ) );
107 printer.setFromTo(1,1);
110 printer.setOrientation( m_settings.pageLayout.orientation == PG_PORTRAIT
111 ? KPrinter::Portrait : KPrinter::Landscape );
113 (KPrinter::PageSize)KoPageFormat::printerPageSize( m_settings.pageLayout.format ) );
116 printer.setFullPage( true);
117 TQString docName( titleText );
118 printer.setDocName( docName );
119 printer.setCreator(KEXI_APP_NAME);
120 if ( !printer.setup( m_mainWin ) ) {
129 if (!painter.begin(&printer)) {
135 uint loops, loopsPerPage;
136 TQValueList<int> pagesToPrint;
140 if (TQPrinter::PageRange == printer.printRange()) {
141 fromPage = printer.fromPage();
142 toPage = printer.toPage();
144 if (fromPage==0 || toPage==0) {
155 for ( int i = fromPage; i<=toPage; i++) {
156 pagesToPrint.append(i);
160 loopsPerPage = printer.collateCopies() ? 1 : printer.numCopies();
163 pagesToPrint = printer.pageList();
164 kdDebug() << pagesToPrint << endl;
165 if (pagesToPrint.isEmpty()) {
167 for ( int i = 0; i<(int)engine. pagesCount(); i++) {
168 pagesToPrint.append(i);
172 fromPage = pagesToPrint.first();
173 if (printer.collate()==KPrinter::Collate) {
175 loops = printer.numCopies();
181 loopsPerPage = printer.numCopies();
187 kdDebug() << "printing..." << endl;
188 bool firstPage = true;
189 for (uint copy = 0;copy < loops; copy++) {
190 kdDebug() << "copy " << (copy+1) << " of " << loops << endl;
191 uint pageNumber = fromPage;
192 TQValueList<int>::ConstIterator pagesIt = pagesToPrint.constBegin();
193 for(;(int)pageNumber == fromPage || !engine. eof(); ++pageNumber) {
194 kdDebug() << "printing..." << endl;
195 if (pagesIt == pagesToPrint.constEnd())
197 if (( int)pageNumber < *pagesIt) {
198 engine. paintPage(pageNumber, painter, false);
201 if (*pagesIt < ( int)pageNumber) {
205 for (uint onePageCounter = 0; onePageCounter < loopsPerPage; onePageCounter++) {
210 kdDebug() << "page #" << pageNumber << endl;
216 kdDebug() << "end of printing." << endl;
229 const TQString& aTitleText, bool reload)
231 m_settings = settings;
232 if (!m_previewEngine)
236 m_printPreviewNeedsReloading = true;
238 bool backToPage0 = true;
239 TQString titleText(aTitleText.stripWhiteSpace());
242 if (!tableOrQuery. table() && !tableOrQuery. query()) {
246 if (titleText.isEmpty())
248 if (!m_previewWindow || m_printPreviewNeedsReloading) {
249 TQString errorMessage;
250 if (!m_previewEngine->init(
251 *conn, tableOrQuery, titleText, errorMessage)) {
252 if (!errorMessage.isEmpty())
253 KMessageBox::sorry(m_mainWin, errorMessage, i18n( "Print Preview"));
257 if (!m_previewWindow) {
261 TQt::WStyle_Customize|TQt::WStyle_NormalBorder|TQt::WStyle_Title|
262 TQt::WStyle_SysMenu|TQt::WStyle_MinMax|TQt::WStyle_ContextHelp);
263 connect(m_previewWindow, TQ_SIGNAL(printRequested()), this, TQ_SLOT(print()));
264 connect(m_previewWindow, TQ_SIGNAL(pageSetupRequested()), this, TQ_SLOT(slotShowPageSetupRequested()));
265 m_previewWindow->show();
266 KDialog::centerOnScreen(m_previewWindow);
267 m_printPreviewNeedsReloading = false;
270 if (m_printPreviewNeedsReloading) {
271 m_previewEngine->clear();
273 m_previewEngine->setTitleText( titleText );
274 m_previewWindow->setFullWidth();
275 m_previewWindow->updatePagesCount();
276 m_printPreviewNeedsReloading = false;
279 m_previewWindow->goToPage(0);
280 m_previewWindow->show();
281 m_previewWindow->raise();
286void KexiSimplePrintingCommand::slotShowPageSetupRequested()
300 TQMap<TQString,TQString>* args )
301 : KexiViewBase( mainWin, parent, "KexiSimplePrintingPageSetup" )
309 objectId = (*args)[ "identifier"].toInt();
311 m_item = mainWin->project()->item( objectId );
314 bool printPreview = false;
316 bool pageSetup = false;
318 printPreview = (*args)[ "action"]== "printPreview";
319 print = (*args)[ "action"]== "print";
320 pageSetup = (*args)[ "action"]== "pageSetup";
321 ok = printPreview || print || pageSetup;
326 m_unit = TDELocale::Metric == TDEGlobal::locale()->measureSystem() ? KoUnit::U_CM : KoUnit::U_INCH;
329 TQVBoxLayout *lyr = new TQVBoxLayout( this);
330 m_contents = new KexiSimplePrintingPageSetupBase( this, "KexiSimplePrintingPageSetupBase");
331 lyr->addWidget(m_contents);
333 setViewWidget(m_contents, true);
335 m_contents->setFocusProxy(m_contents->headerTitleLineEdit);
337 m_contents->printButton->setIconSet( KStdGuiItem::print().iconSet(TDEIcon::Small) );
338 m_contents->printButton->setText( KStdGuiItem::print().text() );
339 connect(m_contents->printButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(print()));
341 m_contents->printPreviewButton->setIconSet( SmallIconSet( "document-print-preview") );
342 m_contents->printPreviewButton->setText( i18n( "Print Previe&w...") );
343 connect(m_contents->printPreviewButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(printPreview()));
345 m_contents->iconLabel->setFixedWidth(32+6);
346 m_contents->iconLabel->setPixmap( DesktopIcon( "text-x-generic", 32) );
347 TQWhatsThis::add(m_contents->headerTitleFontButton, i18n( "Changes font for title text."));
348 connect(m_contents->headerTitleFontButton, TQ_SIGNAL(clicked()),
349 this, TQ_SLOT(slotChangeTitleFont()));
352 m_origCaptionLabelText = m_contents->captionLabel->text();
353 m_contents->headerTitleLineEdit->setText( m_item->captionOrName() );
354 if (m_item->mimeType()== "kexi/query") {
355 m_contents->openDataLink->setText( i18n( "Open This Query") );
356 m_origCaptionLabelText = i18n( "<h2>Page setup for printing \"%1\" query data</h2>");
358 m_contents->captionLabel->setText( m_origCaptionLabelText.arg(m_item->name()) );
360 connect(m_contents->headerTitleLineEdit,TQ_SIGNAL(textChanged( const TQString&)),
361 this, TQ_SLOT(slotTitleTextChanged( const TQString&)));
362 m_contents->headerTitleLineEdit->setFont( m_settings.pageTitleFont );
364 TQWhatsThis::add(m_contents->openDataLink,
365 i18n( "Shows data for table or query associated with this page setup."));
366 TQToolTip::add(m_contents->openDataLink,
367 i18n( "Shows data for table or query associated with this page setup."));
368 connect(m_contents->openDataLink, TQ_SIGNAL(leftClickedURL()), this, TQ_SLOT(slotOpenData()));
370 TQWhatsThis::add(m_contents->saveSetupLink, i18n( "Saves settings for this setup as default."));
371 connect(m_contents->saveSetupLink, TQ_SIGNAL(leftClickedURL()), this, TQ_SLOT(slotSaveSetup()));
373 TQWhatsThis::add(m_contents->addDateTimeCheckbox, i18n( "Adds date and time to the header."));
374 TQWhatsThis::add(m_contents->addPageNumbersCheckbox, i18n( "Adds page numbers to the footer."));
375 TQWhatsThis::add(m_contents->addTableBordersCheckbox, i18n( "Adds table borders."));
377#ifdef KEXI_NO_UNFINISHED
378 m_contents->addDateTimeCheckbox->hide();
379 m_contents->addPageNumbersCheckbox->hide();
382 updatePageLayoutAndUnitInfo();
383 TQWhatsThis::add(m_contents->changePageSizeAndMarginsButton,
384 i18n( "Changes page size and margins."));
385 connect(m_contents->changePageSizeAndMarginsButton, TQ_SIGNAL(clicked()),
386 this, TQ_SLOT(slotChangePageSizeAndMargins()));
388 connect(m_contents->addPageNumbersCheckbox, TQ_SIGNAL(toggled( bool)),
389 this, TQ_SLOT(slotAddPageNumbersCheckboxToggled( bool)));
390 connect(m_contents->addDateTimeCheckbox, TQ_SIGNAL(toggled( bool)),
391 this, TQ_SLOT(slotAddDateTimeCheckboxToggled( bool)));
392 connect(m_contents->addTableBordersCheckbox, TQ_SIGNAL(toggled( bool)),
393 this, TQ_SLOT(slotAddTableBordersCheckboxToggled( bool)));
400 m_contents->addPageNumbersCheckbox->setChecked( m_settings.addPageNumbers );
401 m_contents->addDateTimeCheckbox->setChecked( m_settings.addDateAndTime );
402 m_contents->addTableBordersCheckbox->setChecked( m_settings.addTableBorders );
408 m_printPreviewNeedsReloading = false;
418 connect( this, TQ_SIGNAL(printPreviewForItemRequested( KexiPart::Item*,
424KexiSimplePrintingPageSetup::~KexiSimplePrintingPageSetup()
428void KexiSimplePrintingPageSetup::slotSaveSetup()
434void KexiSimplePrintingPageSetup::updatePageLayoutAndUnitInfo()
437 if (m_settings.pageLayout.format == PG_CUSTOM) {
438 s += TQString( " (%1 %2 x %3 %4)")
439 .arg(m_settings.pageLayout.ptWidth).arg(KoUnit::unitName(m_unit))
440 .arg(m_settings.pageLayout.ptHeight).arg(KoUnit::unitName(m_unit));
443 s += KoPageFormat::name(m_settings.pageLayout.format);
445 + (m_settings.pageLayout.orientation == PG_PORTRAIT ? i18n( "Portrait") : i18n( "Landscape"))
446 + ", " + i18n( "margins:")
447 + " " + KoUnit::toUserStringValue(m_settings.pageLayout.ptLeft, m_unit)
448 + "/" + KoUnit::toUserStringValue(m_settings.pageLayout.ptRight, m_unit)
449 + "/" + KoUnit::toUserStringValue(m_settings.pageLayout.ptTop, m_unit)
450 + "/" + KoUnit::toUserStringValue(m_settings.pageLayout.ptBottom, m_unit)
451 + " " + KoUnit::unitName(m_unit);
452 m_contents->pageSizeAndMarginsLabel->setText( s );
463void KexiSimplePrintingPageSetup::print()
467 emit printItemRequested(m_item, m_settings, m_contents->headerTitleLineEdit->text());
470void KexiSimplePrintingPageSetup::printPreview()
474 emit printPreviewForItemRequested(m_item, m_settings,
475 m_contents->headerTitleLineEdit->text(), m_printPreviewNeedsReloading);
476 m_printPreviewNeedsReloading = false;
479void KexiSimplePrintingPageSetup::slotOpenData()
481 bool openingCancelled;
482 m_mainWin->openObject(m_item, Kexi::DataViewMode, openingCancelled);
485void KexiSimplePrintingPageSetup::slotTitleTextChanged( const TQString&)
487 if (m_contents->headerTitleLineEdit->isModified()) {
488 m_printPreviewNeedsReloading = true;
493 m_contents->headerTitleLineEdit->clearModified();
496void KexiSimplePrintingPageSetup::slotChangeTitleFont()
498 if (TQDialog::Accepted != TDEFontDialog::getFont(m_settings.pageTitleFont, false, this))
500 m_contents->headerTitleLineEdit->setFont( m_settings.pageTitleFont );
504void KexiSimplePrintingPageSetup::slotChangePageSizeAndMargins()
508 if ( int(TQDialog::Accepted) != KoPageLayoutDia::pageLayout(
509 m_settings.pageLayout, headfoot, FORMAT_AND_BORDERS | DISABLE_UNIT, m_unit, this ))
513 updatePageLayoutAndUnitInfo();
519 m_contents->saveSetupLink->setEnabled(set);
523 m_printPreviewNeedsReloading = true;
526void KexiSimplePrintingPageSetup::slotAddPageNumbersCheckboxToggled( bool set)
528 m_settings.addPageNumbers = set;
532void KexiSimplePrintingPageSetup::slotAddDateTimeCheckboxToggled( bool set)
534 m_settings.addDateAndTime = set;
538void KexiSimplePrintingPageSetup::slotAddTableBordersCheckboxToggled( bool set)
540 m_settings.addTableBorders = set;
544#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.
Information about a single object that can be instantiated using Kexi Part.
KexiPart::Item * item(KexiPart::Info *i, const TQString &name)
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)
KexiSimplePrintingPageSetup(KexiMainWindow *mainWin, TQWidget *parent, TQMap< TQString, TQString > *args)
Settings data for simple printing engine.
KexiMainWindow * mainWin() const
|