#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();
}
}