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