pagedialog.cpp
author Dmitriy Morozov <dmitriy@mrzv.org>
Mon, 08 Nov 2010 22:42:06 -0800
changeset 0 7726fefc58a4
child 2 035dc97b8d04
permissions -rw-r--r--
Initial commit

#include <QtGui>

#include "pagedialog.h"

PageDialog::PageDialog(Document* d): iDoc(d)
{
    // buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
    // connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
    // connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));

    QGridLayout *mainLayout = new QGridLayout;
    fillPages(mainLayout);
    setLayout(mainLayout);
    setWindowTitle(tr("Select page"));
    reset();
}

void PageDialog::fillPages(QGridLayout* layout)
{
    for (unsigned i = 0; i < iDoc->countPages(); ++i)
    {
        Canvas* c = new Canvas(this);
        c->setFontPool(iDoc->fontPool());
        c->setPretty(true);
        c->setPage(iDoc->page(i), 0, iDoc->cascade());
        connect(c, SIGNAL(mouseAction(int)), this, SLOT(pageChosen(int)));
        canvases.push_back(c);
        layout->addWidget(c, i/5, i%5);
    }
}

void PageDialog::fitBox(const Rect &box, Canvas* canvas)
{
    if (box.isEmpty())
        return;
    ipeDebug("canvas: %d x %d", canvas->width(), canvas->height());
    double xfactor = box.width() > 0.0  ? (canvas->width() / box.width()) : 20.0;
    double yfactor = box.height() > 0.0 ? (canvas->height() / box.height()) : 20.0;
    double zoom = (xfactor > yfactor) ? yfactor : xfactor;
    canvas->setPan(0.5 * (box.bottomLeft() + box.topRight()));
    canvas->setZoom(zoom);
    canvas->update();
}

void PageDialog::pageChosen(int button)
{
    for (unsigned i = 0; i < canvases.size(); ++i)
        if (canvases[i] == QObject::sender())
        {
            ok = true;
            pageChoice = i;
        }
    accept();
}

void PageDialog::resizeEvent (QResizeEvent *event)
{
    for (unsigned i = 0; i < canvases.size(); ++i)
    {
        fitBox(iDoc->cascade()->findLayout()->paper(), canvases[i]);
        canvases[i]->update();
    }
}