20#include "kexisimpleprintpreviewwindow.h"
21#include "kexisimpleprintingengine.h"
22#include "kexisimpleprintpreviewwindow_p.h"
23#include <kexi_version.h>
30#include <kdialogbase.h>
31#include <tdetoolbarbutton.h>
33#include <kiconloader.h>
35#include <kpushbutton.h>
36#include <tdeapplication.h>
38KexiSimplePrintPreviewView::KexiSimplePrintPreviewView(
40 : TQWidget(parent, "KexiSimplePrintPreviewView", WStaticContents)
43 enablePainting = false;
48void KexiSimplePrintPreviewView::paintEvent( TQPaintEvent *pe )
57 p.fillRect(TQRect(TQPoint(0,0),pm.size()), TQBrush(white));
58 if (m_window->currentPage()>=0)
59 m_window->m_engine.paintPage(m_window->currentPage(), p);
62 bitBlt( this, 0, 0, &pm);
67#define KexiSimplePrintPreviewScrollView_MARGIN KDialogBase::marginHint()
69KexiSimplePrintPreviewScrollView::KexiSimplePrintPreviewScrollView(
71 : TQScrollView(window, "scrollview", WStaticContents|WNoAutoErase)
75 widget = new KexiSimplePrintPreviewView(viewport(), m_window);
87void KexiSimplePrintPreviewScrollView::resizeEvent( TQResizeEvent *re )
89 TQScrollView::resizeEvent(re);
93 setUpdatesEnabled( false);
94 if (re->size().width() > (widget->width()+2*KexiSimplePrintPreviewScrollView_MARGIN)
95 || re->size().height() > (widget->height()+2*KexiSimplePrintPreviewScrollView_MARGIN))
98 TQMAX(re->size().width(), widget->width()+2*KexiSimplePrintPreviewScrollView_MARGIN),
99 TQMAX(re->size().height(), widget->height()+2*KexiSimplePrintPreviewScrollView_MARGIN));
100 int vscrbarWidth = verticalScrollBar()->isVisible() ? verticalScrollBar()->width() : 0;
102 = TQMAX(re->size().width(), widget->width()+2*KexiSimplePrintPreviewScrollView_MARGIN);
103 int newContentsHeight
104 = TQMAX(re->size().height(), widget->height()+2*KexiSimplePrintPreviewScrollView_MARGIN);
105 moveChild(widget, (newContentsWidth - vscrbarWidth - widget->width())/2,
106 (newContentsHeight - widget->height())/2);
107 resizeContents( newContentsWidth, newContentsHeight );
109 setUpdatesEnabled( true);
112void KexiSimplePrintPreviewScrollView::setFullWidth()
114 viewport()->setUpdatesEnabled( false);
115 double widthMM = KoPageFormat::width(
116 m_window->settings().pageLayout.format,
117 m_window->settings().pageLayout.orientation);
118 double heightMM = KoPageFormat::height(
119 m_window->settings().pageLayout.format, m_window->settings().pageLayout.orientation);
121 double constantWidth = width()- KexiSimplePrintPreviewScrollView_MARGIN*6;
122 double heightForWidth = constantWidth * heightMM / widthMM;
124 kdDebug() << "1: " << heightForWidth << endl;
126 heightForWidth = TQMIN(height(), heightForWidth);
127 kdDebug() << "2: " << heightForWidth << endl;
129 constantWidth = heightForWidth * widthMM / heightMM;
130 widget->resize(( int)constantWidth, ( int)heightForWidth);
131 resizeContents( int(widget->width() + 2*KexiSimplePrintPreviewScrollView_MARGIN),
132 int(widget->height() + 2*KexiSimplePrintPreviewScrollView_MARGIN));
133 moveChild(widget, (contentsWidth()-widget->width())/2,
134 (contentsHeight()-widget->height())/2);
135 viewport()->setUpdatesEnabled( true);
136 resize(size()+TQSize(1,1));
137 widget->enablePainting = true;
141void KexiSimplePrintPreviewScrollView::setContentsPos( int x, int y)
146 TQScrollView::setContentsPos(x,y);
153 TQWidget *parent, WFlags f)
154 : TQWidget(parent, "KexiSimplePrintPreviewWindow", f)
156 , m_settings(*m_engine.settings())
160 setCaption(i18n( "%1 - Print Preview - %2").arg(previewName).arg(KEXI_APP_NAME));
161 setIcon(DesktopIcon( "document-print-preview"));
162 TQVBoxLayout *lyr = new TQVBoxLayout( this, 6);
165 m_toolbar = new TDEToolBar(0, this);
166 m_toolbar->setLineWidth(0);
167 m_toolbar->setFrameStyle(TQFrame::NoFrame);
168 m_toolbar->setIconText(TDEToolBar::IconTextRight);
169 lyr->addWidget(m_toolbar);
171 id = m_toolbar->insertWidget( -1, 0, new KPushButton(KStdGuiItem::print(), m_toolbar) );
172 m_toolbar->addConnection( id, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotPrintClicked()));
173 static_cast<KPushButton* >(m_toolbar->getWidget( id))->setAccel(TQt::CTRL|TQt::Key_P);
174 m_toolbar->insertSeparator();
176 id = m_toolbar->insertWidget(-1, 0, new KPushButton(i18n( "Page Set&up..."), m_toolbar));
177 m_toolbar->addConnection( id, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotPageSetup()));
178 m_toolbar->insertSeparator();
181#ifndef KEXI_NO_UNFINISHED
183 id = m_toolbar->insertWidget( -1, 0, new KPushButton(BarIconSet( "zoom-in"), i18n( "Zoom In"), m_toolbar));
184 m_toolbar->addConnection( id, TQ_SIGNAL(clicked()), this, TQ_SLOT( slotZoomInClicked()));
185 m_toolbar->insertSeparator();
187 id = m_toolbar->insertWidget( -1, 0, new KPushButton(BarIconSet( "zoom-out"), i18n( "Zoom Out"), m_toolbar));
188 m_toolbar->addConnection( id, TQ_SIGNAL(clicked()), this, TQ_SLOT( slotZoomOutClicked()));
189 m_toolbar->insertSeparator();
192 id = m_toolbar->insertWidget(-1, 0, new KPushButton(KStdGuiItem::close(), m_toolbar));
193 m_toolbar->addConnection( id, TQ_SIGNAL(clicked()), this, TQ_SLOT(close()));
194 m_toolbar->alignItemRight( id);
196 m_scrollView = new KexiSimplePrintPreviewScrollView( this);
197 m_scrollView->setUpdatesEnabled( false);
198 m_view = m_scrollView->widget;
199 m_scrollView->setSizePolicy(TQSizePolicy::Minimum, TQSizePolicy::Minimum);
200 lyr->addWidget(m_scrollView);
202 TQWidget* navToolbarWidget = new TQWidget( this);
203 navToolbarWidget->setSizePolicy(TQSizePolicy::Minimum, TQSizePolicy::Fixed);
204 TQHBoxLayout *navToolbarLyr = new TQHBoxLayout(navToolbarWidget);
205 lyr->addWidget(navToolbarWidget);
207 m_navToolbar = new TDEToolBar(0, navToolbarWidget);
208 navToolbarLyr->addStretch(1);
209 navToolbarLyr->addWidget(m_navToolbar);
210 navToolbarLyr->addStretch(1);
212 m_navToolbar->setLineWidth(0);
213 m_navToolbar->setFrameStyle(TQFrame::NoFrame);
214 m_navToolbar->setIconText(TDEToolBar::IconTextRight);
216 m_idFirst = m_navToolbar->insertWidget( -1, 0, new KPushButton(BarIconSet( "go-first"), i18n( "First Page"), m_navToolbar));
217 m_navToolbar->addConnection(m_idFirst, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotFirstClicked()));
218 m_navToolbar->insertSeparator();
220 m_idPrevious = m_navToolbar->insertWidget( -1, 0, new KPushButton(BarIconSet( "go-previous"), i18n( "Previous Page"), m_navToolbar));
221 m_navToolbar->addConnection(m_idPrevious, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotPreviousClicked()));
222 m_navToolbar->insertSeparator();
224 m_idPageNumberLabel = m_navToolbar->insertWidget( -1, 0, new TQLabel(m_navToolbar));
225 m_navToolbar->insertSeparator();
227 m_idNext = m_navToolbar->insertWidget( -1, 0, new KPushButton(BarIconSet( "go-next"), i18n( "Next Page"), m_navToolbar));
228 m_navToolbar->addConnection(m_idNext, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotNextClicked()));
229 m_navToolbar->insertSeparator();
231 m_idLast = m_navToolbar->insertWidget( -1, 0, new KPushButton(BarIconSet( "go-last"), i18n( "Last Page"), m_navToolbar));
232 m_navToolbar->addConnection(m_idLast, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotLastClicked()));
233 m_navToolbar->insertSeparator();
235 resize(width(), kapp->desktop()->height()*4/5);
239 TQTimer::singleShot(50, this, TQ_SLOT(initLater()));
242void KexiSimplePrintPreviewWindow::initLater()
249KexiSimplePrintPreviewWindow::~KexiSimplePrintPreviewWindow()
259void KexiSimplePrintPreviewWindow::slotPrintClicked()
262 emit printRequested();
267void KexiSimplePrintPreviewWindow::slotPageSetup()
270 emit pageSetupRequested();
283void KexiSimplePrintPreviewWindow::slotFirstClicked()
288void KexiSimplePrintPreviewWindow::slotPreviousClicked()
290 goToPage(m_pageNumber-1);
293void KexiSimplePrintPreviewWindow::slotNextClicked()
295 goToPage(m_pageNumber+1);
298void KexiSimplePrintPreviewWindow::slotLastClicked()
300 goToPage(m_engine.pagesCount()-1);
303void KexiSimplePrintPreviewWindow::goToPage( int pageNumber)
305 if ((pageNumber==m_pageNumber && m_pagesCount == ( int)m_engine.pagesCount())
306 || pageNumber < 0 || pageNumber > (( int)m_engine.pagesCount()-1))
308 m_pageNumber = pageNumber;
313 m_navToolbar->setItemEnabled(m_idNext, pageNumber < (( int)m_engine.pagesCount()-1));
314 m_navToolbar->setItemEnabled(m_idLast, pageNumber < (( int)m_engine.pagesCount()-1));
315 m_navToolbar->setItemEnabled(m_idPrevious, pageNumber > 0);
316 m_navToolbar->setItemEnabled(m_idFirst, pageNumber > 0);
317 static_cast<TQLabel* >(m_navToolbar->getWidget(m_idPageNumberLabel))->setText(
318 i18n( "Page (number) of (total)", "Page %1 of %2").arg(m_pageNumber+1).arg(m_engine.pagesCount()));
321void KexiSimplePrintPreviewWindow::setFullWidth()
323 m_scrollView->setFullWidth();
326void KexiSimplePrintPreviewWindow::updatePagesCount()
328 TQPixmap pm(m_view->size());
333 m_engine.calculatePagesCount(p);
337bool KexiSimplePrintPreviewWindow::event( TQEvent * e )
339 TQEvent::Type t = e->type();
340 if (t==TQEvent::KeyPress) {
341 TQKeyEvent *ke = static_cast<TQKeyEvent* >(e);
342 const int k = ke->key();
344 if (k==TQt::Key_Equal || k==TQt::Key_Plus)
346 else if (k==TQt::Key_Minus)
348 else if (k==TQt::Key_Home)
350 else if (k==TQt::Key_End)
360 else if (t==TQEvent::AccelOverride) {
361 TQKeyEvent *ke = static_cast<TQKeyEvent* >(e);
362 const int k = ke->key();
364 if (k==TQt::Key_PageUp)
365 slotPreviousClicked();
366 else if (k==TQt::Key_PageDown)
376 return TQWidget::event(e);
380#include "kexisimpleprintpreviewwindow.moc"
381#include "kexisimpleprintpreviewwindow_p.moc"
A window for displaying print preview for simple printing.
int m_pagesCount needed to know that pages could has been changed
void slotZoomOutClicked()
KexiSimplePrintPreviewWindow(KexiSimplePrintingEngine &engine, const TQString &previewName, TQWidget *parent, WFlags f=0)
An engine painting data on pages using TQPainter. The engine allows for random access to any page.
|