00001 #include "pdfscene.h"
00002 #include "boxtool.h"
00003 #include <QGraphicsView>
00004
00005 #define MOUSE_CLICK_MAX_MOVEMENT 3
00006
00007 PDFScene::PDFScene() :
00008 QGraphicsScene(),
00009 boxTool(new BoxTool(this)),
00010 selectTool(new SelectTool(this)),
00011 tool(selectTool),
00012 visibleItems(ImageVisible)
00013 {
00014 pdfView.setZValue(0);
00015 addItem(&pdfView);
00016 }
00017
00018 void PDFScene::image(QImage pm)
00019 {
00020 pdfView.setPixmap(QPixmap::fromImage(pm));
00021
00022 }
00023
00024 void PDFScene::pageText(QList<Poppler::TextBox*> boxen)
00025 {
00026
00027 foreach (QGraphicsItem* item, items())
00028 if (item->type() == QGraphicsTextItem::Type)
00029 removeItem(item);
00030
00031
00032 int z = 1;
00033 foreach(Poppler::TextBox* box, boxen)
00034 {
00035 QGraphicsTextItem* t = addText(box->text());
00036 t->setFlags(QGraphicsItem::ItemIsSelectable);
00037 QFont font = t->font();
00039 font.setPointSizeF(box->boundingBox().height() - 1.5);
00040 t->setFont(font);
00041 QRectF textBBox = t->boundingRect();
00042 textBBox.moveCenter(box->boundingBox().center());
00043 t->setPos(textBBox.topLeft());
00044 t->setZValue(z++);
00045 t->setVisible(visibleItems.testFlag(TextVisible));
00046
00047
00048
00049 }
00050 }
00051
00052 void PDFScene::mouseMoveEvent ( QGraphicsSceneMouseEvent * ev)
00053 {
00054 if (tool && ev->buttons() & Qt::LeftButton)
00055 tool->mouseMoveEvent(ev);
00056
00057
00058 emit cursorPos(ev->scenePos());
00059 }
00060
00061 void PDFScene::mousePressEvent ( QGraphicsSceneMouseEvent * ev)
00062 {
00063 if (tool && ev->buttons() & Qt::LeftButton)
00064 tool->mousePressEvent(ev);
00065 }
00066
00067 void PDFScene::mouseReleaseEvent ( QGraphicsSceneMouseEvent * ev)
00068 {
00069 if (tool && ev->button() == Qt::LeftButton)
00070 {
00071 if ( abs(ev->buttonDownScreenPos(Qt::LeftButton).x() - ev->screenPos().x()) < MOUSE_CLICK_MAX_MOVEMENT &&
00072 abs(ev->buttonDownScreenPos(Qt::LeftButton).y() - ev->screenPos().y()) < MOUSE_CLICK_MAX_MOVEMENT )
00073 tool->mouseLeftClickEvent(ev);
00074 tool->mouseReleaseEvent(ev);
00075 }
00076 update();
00077 }
00078
00079 QImage PDFScene::image()
00080 {
00081 return pdfView.pixmap().toImage();
00082 }
00083
00084 void PDFScene::updateVisibilities()
00085 {
00086 foreach (QGraphicsItem* item, items())
00087 {
00088
00089
00090
00091
00092 switch (item->type())
00093 {
00094 case QGraphicsTextItem::Type:
00095 item->setVisible(visibleItems.testFlag(TextVisible));
00096 break;
00097 case QGraphicsPixmapItem::Type:
00098 item->setVisible(visibleItems.testFlag(ImageVisible));
00099 break;
00100 }
00101 }
00102 }