summaryrefslogtreecommitdiffstats
path: root/kexi/main/printing/kexisimpleprintpreviewwindow.cpp
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
commit8362bf63dea22bbf6736609b0f49c152f975eb63 (patch)
tree0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kexi/main/printing/kexisimpleprintpreviewwindow.cpp
downloadkoffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz
koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kexi/main/printing/kexisimpleprintpreviewwindow.cpp')
-rw-r--r--kexi/main/printing/kexisimpleprintpreviewwindow.cpp381
1 files changed, 381 insertions, 0 deletions
diff --git a/kexi/main/printing/kexisimpleprintpreviewwindow.cpp b/kexi/main/printing/kexisimpleprintpreviewwindow.cpp
new file mode 100644
index 00000000..4ba487d9
--- /dev/null
+++ b/kexi/main/printing/kexisimpleprintpreviewwindow.cpp
@@ -0,0 +1,381 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005 Jaroslaw Staniek <[email protected]>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This program 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 program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "kexisimpleprintpreviewwindow.h"
+#include "kexisimpleprintingengine.h"
+#include "kexisimpleprintpreviewwindow_p.h"
+#include <kexi_version.h>
+
+#include <qlayout.h>
+#include <qaccel.h>
+#include <qtimer.h>
+#include <qlabel.h>
+
+#include <kdialogbase.h>
+#include <ktoolbarbutton.h>
+#include <klocale.h>
+#include <kiconloader.h>
+#include <kdebug.h>
+#include <kpushbutton.h>
+#include <kapplication.h>
+
+KexiSimplePrintPreviewView::KexiSimplePrintPreviewView(
+ QWidget *parent, KexiSimplePrintPreviewWindow *window)
+ : QWidget(parent, "KexiSimplePrintPreviewView", WStaticContents)//|WNoAutoErase)
+ , m_window(window)
+{
+ enablePainting = false;
+// resize(300,400);
+// resizeContents(200, 400);
+}
+
+void KexiSimplePrintPreviewView::paintEvent( QPaintEvent *pe )
+{
+ Q_UNUSED(pe);
+ if (!enablePainting)
+ return;
+ QPixmap pm(size()); //dbl buffered
+ QPainter p;
+ p.begin(&pm, this);
+//! @todo only for screen!
+ p.fillRect(QRect(QPoint(0,0),pm.size()), QBrush(white));//pe->rect(), QBrush(white));
+ if (m_window->currentPage()>=0)
+ m_window->m_engine.paintPage(m_window->currentPage(), p);
+// emit m_window->paintingPageRequested(m_window->currentPage(), p);
+ p.end();
+ bitBlt(this, 0, 0, &pm);
+}
+
+//--------------------------
+
+#define KexiSimplePrintPreviewScrollView_MARGIN KDialogBase::marginHint()
+
+KexiSimplePrintPreviewScrollView::KexiSimplePrintPreviewScrollView(
+ KexiSimplePrintPreviewWindow *window)
+ : QScrollView(window, "scrollview", WStaticContents|WNoAutoErase)
+ , m_window(window)
+{
+// this->settings = settings;
+ widget = new KexiSimplePrintPreviewView(viewport(), m_window);
+
+/* int widthMM = KoPageFormat::width(
+ settings.pageLayout.format, settings.pageLayout.orientation);
+ int heightMM = KoPageFormat::height(
+ settings.pageLayout.format, settings.pageLayout.orientation);
+// int constantHeight = 400;
+// widget->resize(constantHeight * widthMM / heightMM, constantHeight ); //keep aspect
+*/
+ addChild(widget);
+}
+
+void KexiSimplePrintPreviewScrollView::resizeEvent( QResizeEvent *re )
+{
+ QScrollView::resizeEvent(re);
+// kdDebug() << re->size().width() << " " << re->size().height() << endl;
+// kdDebug() << contentsWidth() << " " << contentsHeight() << endl;
+// kdDebug() << widget->width() << " " << widget->height() << endl;
+ setUpdatesEnabled(false);
+ if (re->size().width() > (widget->width()+2*KexiSimplePrintPreviewScrollView_MARGIN)
+ || re->size().height() > (widget->height()+2*KexiSimplePrintPreviewScrollView_MARGIN))
+ {
+ resizeContents(
+ QMAX(re->size().width(), widget->width()+2*KexiSimplePrintPreviewScrollView_MARGIN),
+ QMAX(re->size().height(), widget->height()+2*KexiSimplePrintPreviewScrollView_MARGIN));
+ int vscrbarWidth = verticalScrollBar()->isVisible() ? verticalScrollBar()->width() : 0;
+ int newContentsWidth
+ = QMAX(re->size().width(), widget->width()+2*KexiSimplePrintPreviewScrollView_MARGIN);
+ int newContentsHeight
+ = QMAX(re->size().height(), widget->height()+2*KexiSimplePrintPreviewScrollView_MARGIN);
+ moveChild(widget, (newContentsWidth - vscrbarWidth - widget->width())/2,
+ (newContentsHeight - widget->height())/2);
+ resizeContents( newContentsWidth, newContentsHeight );
+ }
+ setUpdatesEnabled(true);
+}
+
+void KexiSimplePrintPreviewScrollView::setFullWidth()
+{
+ viewport()->setUpdatesEnabled(false);
+ double widthMM = KoPageFormat::width(
+ m_window->settings().pageLayout.format,
+ m_window->settings().pageLayout.orientation);
+ double heightMM = KoPageFormat::height(
+ m_window->settings().pageLayout.format, m_window->settings().pageLayout.orientation);
+// int constantWidth = m_window->width()- KexiSimplePrintPreviewScrollView_MARGIN*6;
+ double constantWidth = width()- KexiSimplePrintPreviewScrollView_MARGIN*6;
+ double heightForWidth = constantWidth * heightMM / widthMM;
+// heightForWidth = QMIN(kapp->desktop()->height()*4/5, heightForWidth);
+ kdDebug() << "1: " << heightForWidth << endl;
+#if 0 //todo we can use this if we want to fix the height to width of the page
+ heightForWidth = QMIN(height(), heightForWidth);
+ kdDebug() << "2: " << heightForWidth << endl;
+#endif
+ constantWidth = heightForWidth * widthMM / heightMM;
+ widget->resize((int)constantWidth, (int)heightForWidth); //keep aspect
+ resizeContents(int(widget->width() + 2*KexiSimplePrintPreviewScrollView_MARGIN),
+ int(widget->height() + 2*KexiSimplePrintPreviewScrollView_MARGIN));
+ moveChild(widget, (contentsWidth()-widget->width())/2,
+ (contentsHeight()-widget->height())/2);
+ viewport()->setUpdatesEnabled(true);
+ resize(size()+QSize(1,1)); //to update pos.
+ widget->enablePainting = true;
+ widget->repaint();
+}
+
+void KexiSimplePrintPreviewScrollView::setContentsPos(int x, int y)
+{
+// kdDebug() << "############" << x << " " << y << " " << contentsX()<< " " <<contentsY() << endl;
+ if (x<0 || y<0) //to avoid endless loop on Linux
+ return;
+ QScrollView::setContentsPos(x,y);
+}
+
+//------------------
+
+KexiSimplePrintPreviewWindow::KexiSimplePrintPreviewWindow(
+ KexiSimplePrintingEngine &engine, const QString& previewName,
+ QWidget *parent, WFlags f)
+ : QWidget(parent, "KexiSimplePrintPreviewWindow", f)
+ , m_engine(engine)
+ , m_settings(*m_engine.settings())
+ , m_pageNumber(-1)
+ , m_pagesCount(-1)
+{
+ setCaption(i18n("%1 - Print Preview - %2").arg(previewName).arg(KEXI_APP_NAME));
+ setIcon(DesktopIcon("filequickprint"));
+ QVBoxLayout *lyr = new QVBoxLayout(this, 6);
+
+ int id;
+ m_toolbar = new KToolBar(0, this);
+ m_toolbar->setLineWidth(0);
+ m_toolbar->setFrameStyle(QFrame::NoFrame);
+ m_toolbar->setIconText(KToolBar::IconTextRight);
+ lyr->addWidget(m_toolbar);
+
+ id = m_toolbar->insertWidget( -1, 0, new KPushButton(KStdGuiItem::print(), m_toolbar) );
+ m_toolbar->addConnection(id, SIGNAL(clicked()), this, SLOT(slotPrintClicked()));
+ static_cast<KPushButton*>(m_toolbar->getWidget(id))->setAccel(Qt::CTRL|Qt::Key_P);
+ m_toolbar->insertSeparator();
+
+ id = m_toolbar->insertWidget(-1, 0, new KPushButton(i18n("Page Set&up..."), m_toolbar));
+ m_toolbar->addConnection(id, SIGNAL(clicked()), this, SLOT(slotPageSetup()));
+ m_toolbar->insertSeparator();
+
+
+#ifndef KEXI_NO_UNFINISHED
+//! @todo unfinished
+ id = m_toolbar->insertWidget( -1, 0, new KPushButton(BarIconSet("viewmag+"), i18n("Zoom In"), m_toolbar));
+ m_toolbar->addConnection(id, SIGNAL(clicked()), this, SLOT(slotZoomInClicked()));
+ m_toolbar->insertSeparator();
+
+ id = m_toolbar->insertWidget( -1, 0, new KPushButton(BarIconSet("viewmag-"), i18n("Zoom Out"), m_toolbar));
+ m_toolbar->addConnection(id, SIGNAL(clicked()), this, SLOT(slotZoomOutClicked()));
+ m_toolbar->insertSeparator();
+#endif
+
+ id = m_toolbar->insertWidget(-1, 0, new KPushButton(KStdGuiItem::close(), m_toolbar));
+ m_toolbar->addConnection(id, SIGNAL(clicked()), this, SLOT(close()));
+ m_toolbar->alignItemRight(id);
+
+ m_scrollView = new KexiSimplePrintPreviewScrollView(this);
+ m_scrollView->setUpdatesEnabled(false);
+ m_view = m_scrollView->widget;
+ m_scrollView->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ lyr->addWidget(m_scrollView);
+
+ QWidget* navToolbarWidget = new QWidget(this); //widget used to center the navigator toolbar
+ navToolbarWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
+ QHBoxLayout *navToolbarLyr = new QHBoxLayout(navToolbarWidget);
+ lyr->addWidget(navToolbarWidget);
+
+ m_navToolbar = new KToolBar(0, navToolbarWidget);
+ navToolbarLyr->addStretch(1);
+ navToolbarLyr->addWidget(m_navToolbar);
+ navToolbarLyr->addStretch(1);
+// m_navToolbar->setFullWidth(true);
+ m_navToolbar->setLineWidth(0);
+ m_navToolbar->setFrameStyle(QFrame::NoFrame);
+ m_navToolbar->setIconText(KToolBar::IconTextRight);
+
+ m_idFirst = m_navToolbar->insertWidget( -1, 0, new KPushButton(BarIconSet("start"), i18n("First Page"), m_navToolbar));
+ m_navToolbar->addConnection(m_idFirst, SIGNAL(clicked()), this, SLOT(slotFirstClicked()));
+ m_navToolbar->insertSeparator();
+
+ m_idPrevious = m_navToolbar->insertWidget( -1, 0, new KPushButton(BarIconSet("previous"), i18n("Previous Page"), m_navToolbar));
+ m_navToolbar->addConnection(m_idPrevious, SIGNAL(clicked()), this, SLOT(slotPreviousClicked()));
+ m_navToolbar->insertSeparator();
+
+ m_idPageNumberLabel = m_navToolbar->insertWidget( -1, 0, new QLabel(m_navToolbar));
+ m_navToolbar->insertSeparator();
+
+ m_idNext = m_navToolbar->insertWidget( -1, 0, new KPushButton(BarIconSet("next"), i18n("Next Page"), m_navToolbar));
+ m_navToolbar->addConnection(m_idNext, SIGNAL(clicked()), this, SLOT(slotNextClicked()));
+ m_navToolbar->insertSeparator();
+
+ m_idLast = m_navToolbar->insertWidget( -1, 0, new KPushButton(BarIconSet("finish"), i18n("Last Page"), m_navToolbar));
+ m_navToolbar->addConnection(m_idLast, SIGNAL(clicked()), this, SLOT(slotLastClicked()));
+ m_navToolbar->insertSeparator();
+
+ resize(width(), kapp->desktop()->height()*4/5);
+
+//! @todo progress bar...
+
+ QTimer::singleShot(50, this, SLOT(initLater()));
+}
+
+void KexiSimplePrintPreviewWindow::initLater()
+{
+ setFullWidth();
+ updatePagesCount();
+ goToPage(0);
+}
+
+KexiSimplePrintPreviewWindow::~KexiSimplePrintPreviewWindow()
+{
+}
+
+/*void KexiSimplePrintPreviewWindow::setPagesCount(int pagesCount)
+{
+ m_pagesCount = pagesCount;
+ goToPage(0);
+}*/
+
+void KexiSimplePrintPreviewWindow::slotPrintClicked()
+{
+ hide();
+ emit printRequested();
+ show();
+ raise();
+}
+
+void KexiSimplePrintPreviewWindow::slotPageSetup()
+{
+ lower();
+ emit pageSetupRequested();
+}
+
+void KexiSimplePrintPreviewWindow::slotZoomInClicked()
+{
+ //! @todo
+}
+
+void KexiSimplePrintPreviewWindow::slotZoomOutClicked()
+{
+ //! @todo
+}
+
+void KexiSimplePrintPreviewWindow::slotFirstClicked()
+{
+ goToPage(0);
+}
+
+void KexiSimplePrintPreviewWindow::slotPreviousClicked()
+{
+ goToPage(m_pageNumber-1);
+}
+
+void KexiSimplePrintPreviewWindow::slotNextClicked()
+{
+ goToPage(m_pageNumber+1);
+}
+
+void KexiSimplePrintPreviewWindow::slotLastClicked()
+{
+ goToPage(m_engine.pagesCount()-1);
+}
+
+void KexiSimplePrintPreviewWindow::goToPage(int pageNumber)
+{
+ if ((pageNumber==m_pageNumber && m_pagesCount == (int)m_engine.pagesCount())
+ || pageNumber < 0 || pageNumber > ((int)m_engine.pagesCount()-1))
+ return;
+ m_pageNumber = pageNumber;
+ m_pagesCount = m_engine.pagesCount();
+
+ m_view->repaint(); //this will automatically paint a new page
+
+ m_navToolbar->setItemEnabled(m_idNext, pageNumber < ((int)m_engine.pagesCount()-1));
+ m_navToolbar->setItemEnabled(m_idLast, pageNumber < ((int)m_engine.pagesCount()-1));
+ m_navToolbar->setItemEnabled(m_idPrevious, pageNumber > 0);
+ m_navToolbar->setItemEnabled(m_idFirst, pageNumber > 0);
+ static_cast<QLabel*>(m_navToolbar->getWidget(m_idPageNumberLabel))->setText(
+ i18n("Page (number) of (total)", "Page %1 of %2").arg(m_pageNumber+1).arg(m_engine.pagesCount()));
+}
+
+void KexiSimplePrintPreviewWindow::setFullWidth()
+{
+ m_scrollView->setFullWidth();
+}
+
+void KexiSimplePrintPreviewWindow::updatePagesCount()
+{
+ QPixmap pm(m_view->size()); //dbl buffered
+ QPainter p(m_view);
+ //p.begin(&pm, this);
+////! @todo only for screen!
+// p.fillRect(pe->rect(), QBrush(white));
+ m_engine.calculatePagesCount(p);
+ p.end();
+}
+
+bool KexiSimplePrintPreviewWindow::event( QEvent * e )
+{
+ QEvent::Type t = e->type();
+ if (t==QEvent::KeyPress) {
+ QKeyEvent *ke = static_cast<QKeyEvent*>(e);
+ const int k = ke->key();
+ bool ok = true;
+ if (k==Qt::Key_Equal || k==Qt::Key_Plus)
+ slotZoomInClicked();
+ else if (k==Qt::Key_Minus)
+ slotZoomOutClicked();
+ else if (k==Qt::Key_Home)
+ slotFirstClicked();
+ else if (k==Qt::Key_End)
+ slotLastClicked();
+ else
+ ok = false;
+
+ if (ok) {
+ ke->accept();
+ return true;
+ }
+ }
+ else if (t==QEvent::AccelOverride) {
+ QKeyEvent *ke = static_cast<QKeyEvent*>(e);
+ const int k = ke->key();
+ bool ok = true;
+ if (k==Qt::Key_PageUp)
+ slotPreviousClicked();
+ else if (k==Qt::Key_PageDown)
+ slotNextClicked();
+ else
+ ok = false;
+
+ if (ok) {
+ ke->accept();
+ return true;
+ }
+ }
+ return QWidget::event(e);
+}
+
+
+#include "kexisimpleprintpreviewwindow.moc"
+#include "kexisimpleprintpreviewwindow_p.moc"