pagedialog.cpp
author Dmitriy Morozov <dmitriy@mrzv.org>
Sat, 27 Nov 2010 09:56:16 -0800
changeset 6 0ffafff7682f
parent 5 1ff3df15f3dc
permissions -rw-r--r--
Updated PageDialog for the new Canvas::setPage()

#include <QtGui>

#include "pagedialog.h"

PageDialog::PageDialog(Document* d, const std::vector<PageViewPair>& v): iDoc(d), views(v)
{
    // 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/view"));
    ok = false;
}

void PageDialog::fillPages(QGridLayout* layout)
{
    for (unsigned i = 0; i < views.size(); ++i)
    {
        Canvas* c = new Canvas(this);
        c->setFontPool(iDoc->fontPool());
        Canvas::Style style = c->canvasStyle();
        style.pretty = true;
        c->setCanvasStyle(style);
        c->setPage(iDoc->page(views[i].first), views[i].first, views[i].second, 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 = views[i].first;
            viewChoice = views[i].second;
        }
    accept();
}

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