aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/desktop-utils/lumina-pdf/mainUI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src-qt5/desktop-utils/lumina-pdf/mainUI.cpp')
-rw-r--r--src-qt5/desktop-utils/lumina-pdf/mainUI.cpp372
1 files changed, 309 insertions, 63 deletions
diff --git a/src-qt5/desktop-utils/lumina-pdf/mainUI.cpp b/src-qt5/desktop-utils/lumina-pdf/mainUI.cpp
index ce2707c9..4e65a766 100644
--- a/src-qt5/desktop-utils/lumina-pdf/mainUI.cpp
+++ b/src-qt5/desktop-utils/lumina-pdf/mainUI.cpp
@@ -16,23 +16,24 @@
#include <QApplication>
#include <QScreen>
#include <QTimer>
+#include <iostream>
#include <QtConcurrent>
#include <LuminaXDG.h>
-#include "CM_PrintPreviewWidget.h"
+#include "PrintWidget.h"
MainUI::MainUI() : QMainWindow(), ui(new Ui::MainUI()){
ui->setupUi(this);
this->setWindowTitle(tr("Lumina PDF Viewer"));
this->setWindowIcon( LXDG::findIcon("application-pdf","unknown"));
+ this->highlight = false;
presentationLabel = 0;
- CurrentPage = 0;
- ccw = 0;
+ CurrentPage = 1;
lastdir = QDir::homePath();
Printer = new QPrinter();
//Create the interface widgets
- WIDGET = new CM_PrintPreviewWidget(Printer,this);
+ WIDGET = new PrintWidget(Printer, this);
clockTimer = new QTimer(this);
clockTimer->setInterval(1000); //1-second updates to clock
connect(clockTimer, SIGNAL(timeout()), this, SLOT(updateClock()) );
@@ -45,16 +46,20 @@ MainUI::MainUI() : QMainWindow(), ui(new Ui::MainUI()){
contextMenu = new QMenu(this);
connect(contextMenu, SIGNAL(aboutToShow()), this, SLOT(updateContextMenu()));
//Now put the widgets into the UI
+ ui->bookmarksFrame->setParent(WIDGET);
+ ui->findGroup->setParent(WIDGET);
+ qDebug() << "Setting central widget";
this->setCentralWidget(WIDGET);
WIDGET->setContextMenuPolicy(Qt::CustomContextMenu);
connect(WIDGET, SIGNAL(customContextMenuRequested(const QPoint&)),this, SLOT(showContextMenu(const QPoint&)) );
- connect(WIDGET, SIGNAL(paintRequested(QPrinter*)), this, SLOT(paintOnWidget(QPrinter*)) );
+ connect(WIDGET, &PrintWidget::paintRequested, this,
+ [=](QPrinter *printer) { this->paintOnWidget(printer, this->highlight); });
DOC = 0;
connect(this, SIGNAL(PageLoaded(int)), this, SLOT(slotPageLoaded(int)) );
PrintDLG = new QPrintDialog(this);
- connect(PrintDLG, SIGNAL(accepted(QPrinter*)), this, SLOT(paintToPrinter(QPrinter*)) );
- connect(ui->menuStart_Presentation, SIGNAL(triggered(QAction*)), this, SLOT(slotStartPresentation(QAction*)) );
+ //connect(PrintDLG, SIGNAL(accepted(QPrinter*)), this, SLOT(paintToPrinter(QPrinter*)) );
+ //connect(ui->menuStart_Presentation, SIGNAL(triggered(QAction*)), this, SLOT(slotStartPresentation(QAction*)) );
//Create the other interface widgets
progress = new QProgressBar(this);
@@ -79,20 +84,66 @@ MainUI::MainUI() : QMainWindow(), ui(new Ui::MainUI()){
tmp->addAction(ui->actionAll_Pages);
ui->actionSingle_Page->setChecked(true);
+ qDebug() << "Starting connections";
+
//Connect up the buttons
connect(ui->actionClose, SIGNAL(triggered()), this, SLOT(close()) );
connect(ui->actionPrint, SIGNAL(triggered()), PrintDLG, SLOT(open()) );
connect(ui->actionFit_Width, SIGNAL(triggered()), WIDGET, SLOT(fitToWidth()) );
- connect(ui->actionFit_Page, SIGNAL(triggered()), WIDGET, SLOT(fitInView()) );
+ connect(ui->actionFit_Page, SIGNAL(triggered()), WIDGET, SLOT(fitView()) );
connect(ui->actionOpen_PDF, SIGNAL(triggered()), this, SLOT(OpenNewFile()) );
connect(ui->actionSingle_Page, SIGNAL(triggered()), WIDGET, SLOT(setSinglePageViewMode()) );
connect(ui->actionDual_Pages, SIGNAL(triggered()), WIDGET, SLOT(setFacingPagesViewMode()) );
connect(ui->actionAll_Pages, SIGNAL(triggered()), WIDGET, SLOT(setAllPagesViewMode()) );
- connect(ui->actionScroll_Mode, SIGNAL(toggled(bool)), this, SLOT(setScroll(bool)) );
+ //connect(ui->actionScroll_Mode, &QAction::triggered, this, [&] { this->setScroll(true); });
+ //connect(ui->actionSelect_Mode, &QAction::triggered, this, [&] { this->setScroll(false); });
connect(ui->actionZoom_In, &QAction::triggered, WIDGET, [&] { WIDGET->zoomIn(1.2); });
connect(ui->actionZoom_Out, &QAction::triggered, WIDGET, [&] { WIDGET->zoomOut(1.2); });
- connect(ui->actionRotate_Counterclockwise, &QAction::triggered, this, [&] { this->rotate(Printer, true); });
- connect(ui->actionRotate_Clockwise, &QAction::triggered, this, [&] { this->rotate(Printer, false); });
+ connect(ui->actionRotate_Counterclockwise, &QAction::triggered, this, [&] { this->rotate(true); });
+ connect(ui->actionRotate_Clockwise, &QAction::triggered, this, [&] { this->rotate(false); });
+ connect(ui->actionZoom_In_2, &QAction::triggered, WIDGET, [&] { WIDGET->zoomIn(1.2); });
+ connect(ui->actionZoom_Out_2, &QAction::triggered, WIDGET, [&] { WIDGET->zoomOut(1.2); });
+ connect(ui->actionFirst_Page, SIGNAL(triggered()), this, SLOT(firstPage()) );
+ connect(ui->actionPrevious_Page, SIGNAL(triggered()), this, SLOT(prevPage()) );
+ connect(ui->actionNext_Page, SIGNAL(triggered()), this, SLOT(nextPage()) );
+ connect(ui->actionLast_Page, SIGNAL(triggered()), this, SLOT(lastPage()) );
+ connect(ui->actionProperties, SIGNAL(triggered()), this, SLOT(showInformation()));
+ connect(ui->actionFind, SIGNAL(triggered()), this, SLOT(enableFind()));
+ connect(ui->actionFind_Next, &QAction::triggered, this,
+ [&] { find(ui->textEdit->text(), true); });
+ connect(ui->actionFind_Previous, &QAction::triggered, this,
+ [&] { find(ui->textEdit->text(), false); });
+ connect(ui->findNextB, &QPushButton::clicked, this,
+ [&] { find(ui->textEdit->text(), true); });
+ connect(ui->findPrevB, &QPushButton::clicked, this,
+ [&] { find(ui->textEdit->text(), false); });
+ connect(ui->matchCase, &QPushButton::clicked, this,
+ [&] (bool value) { this->matchCase = value; });
+ connect(ui->closeFind, &QPushButton::clicked, this,
+ [&] { ui->findGroup->setVisible(false); this->setFocus(); });
+ connect(ui->actionClearHighlights, &QAction::triggered, WIDGET,
+ [&] { WIDGET->updatePreview(); });
+ connect(ui->actionBookmarks, SIGNAL(triggered()), this, SLOT(showBookmarks()));
+
+ qDebug() << "Finished connctions";
+
+ //int curP = WIDGET->currentPage()-1; //currentPage reports pages starting at 1
+ //int lastP = numPages-1;
+ ui->actionFirst_Page->setText(tr("First Page"));
+ ui->actionPrevious_Page->setText(tr("Previous Page"));
+ ui->actionNext_Page->setText(tr("Next Page"));
+ ui->actionLast_Page->setText(tr("Last Page"));
+ /*ui->actionFirst_Page->setEnabled(curP!=0);
+ ui->actionPrevious_Page->setEnabled(curP>0);
+ ui->actionNext_Page->setEnabled(curP<lastP);
+ ui->actionLast_Page->setEnabled(curP!=lastP);*/
+
+ ui->actionStart_Here->setText(tr("Start Presentation (current slide)"));
+ connect(ui->actionStart_Here, SIGNAL(triggered()), this, SLOT(startPresentationHere()) );
+ ui->actionStart_Begin->setText(tr("Start Presentation (at beginning)"));
+ connect(ui->actionStart_Begin, SIGNAL(triggered()), this, SLOT(startPresentationBeginning()) );
+ ui->actionStop_Presentation->setText(tr("Stop Presentation"));
+ connect(ui->actionStop_Presentation, SIGNAL(triggered()), this, SLOT(closePresentation()) );
//Setup all the icons
ui->actionPrint->setIcon( LXDG::findIcon("document-print",""));
@@ -104,14 +155,40 @@ MainUI::MainUI() : QMainWindow(), ui(new Ui::MainUI()){
ui->actionDual_Pages->setIcon(LXDG::findIcon("format-view-grid-small",""));
ui->actionAll_Pages->setIcon(LXDG::findIcon("format-view-grid-large",""));
ui->actionScroll_Mode->setIcon(LXDG::findIcon("cursor-pointer",""));
+ ui->actionSelect_Mode->setIcon(LXDG::findIcon("cursor-text",""));
ui->actionZoom_In->setIcon(LXDG::findIcon("zoom-in",""));
ui->actionZoom_Out->setIcon(LXDG::findIcon("zoom-out",""));
+ ui->actionZoom_In_2->setIcon(LXDG::findIcon("zoom-in",""));
+ ui->actionZoom_Out_2->setIcon(LXDG::findIcon("zoom-out",""));
ui->actionRotate_Counterclockwise->setIcon(LXDG::findIcon("object-rotate-left",""));
ui->actionRotate_Clockwise->setIcon(LXDG::findIcon("object-rotate-right",""));
+ ui->actionFirst_Page->setIcon(LXDG::findIcon("go-first",""));
+ ui->actionPrevious_Page->setIcon(LXDG::findIcon("go-previous",""));
+ ui->actionNext_Page->setIcon(LXDG::findIcon("go-next",""));
+ ui->actionLast_Page->setIcon(LXDG::findIcon("go-last",""));
+ ui->actionStart_Here->setIcon(LXDG::findIcon("media-playback-start-circled",""));
+ ui->actionStart_Begin->setIcon(LXDG::findIcon("presentation-play",""));
+ ui->actionStop_Presentation->setIcon(LXDG::findIcon("media-playback-stop-circled",""));
+ ui->actionBookmarks->setIcon(LXDG::findIcon("bookmark-new",""));
+ ui->actionFind->setIcon(LXDG::findIcon("edit-find",""));
+ ui->actionFind_Next->setIcon(LXDG::findIcon("edit-find-next",""));
+ ui->actionFind_Previous->setIcon(LXDG::findIcon("edit-find-prev",""));
+ ui->actionProperties->setIcon(LXDG::findIcon("dialog-information",""));
+ ui->actionSettings->setIcon(LXDG::findIcon("document-properties",""));
+ ui->findNextB->setIcon(LXDG::findIcon("go-down-search"));
+ ui->findPrevB->setIcon(LXDG::findIcon("go-up-search"));
+ ui->matchCase->setIcon(LXDG::findIcon("format-text-italic"));
+ ui->closeFind->setIcon(LXDG::findIcon("dialog-close"));
+
+ qDebug() << "Finished setting icons";
//Now set the default state of the menu's and actions
- ui->menuStart_Presentation->setEnabled(false);
ui->actionStop_Presentation->setEnabled(false);
+ ui->actionStart_Here->setEnabled(false);
+ ui->actionStart_Begin->setEnabled(false);
+
+ ui->findGroup->setVisible(false);
+ ui->bookmarksFrame->setVisible(false);
}
MainUI::~MainUI(){
@@ -141,7 +218,7 @@ void MainUI::loadFile(QString path){
delete DOC;
DOC=0;
}
- loadingHash.clear(); //clear out this hash
+ //loadingHash.clear(); //clear out this hash
numPages = -1;
DOC = TDOC; //Save this for later
qDebug() << "Opening File:" << path;
@@ -157,14 +234,15 @@ void MainUI::loadFile(QString path){
Printer->setPageSize( QPageSize(PAGE->pageSize(), QPageSize::Point) );
Printer->setPageMargins(QMarginsF(0,0,0,0), QPageLayout::Point);
switch(PAGE->orientation()){
- case Poppler::Page::Landscape:
- Printer->setOrientation(QPrinter::Landscape); break;
- default:
- Printer->setOrientation(QPrinter::Portrait);
+ case Poppler::Page::Landscape:
+ Printer->setOrientation(QPrinter::Landscape); break;
+ default:
+ Printer->setOrientation(QPrinter::Portrait);
}
delete PAGE;
qDebug() << " - Document Setup : start loading pages now";
- QTimer::singleShot(10, WIDGET, SLOT(updatePreview())); //start loading the file preview
+ startLoadingPages(Printer);
+ //QTimer::singleShot(10, WIDGET, SLOT(updatePreview())); //start loading the file preview
}
}
@@ -175,7 +253,7 @@ void MainUI::loadPage(int num, Poppler::Document *doc, MainUI *obj, QSize dpi, Q
// Using Qt to scale the image (adjust page value) smooths out the image quite a bit without a lot of performance loss (but cannot scale up without pixelization)
// The best approach seams to be to increase the DPI a bit, but match that with the same scaling on the page size (smoothing)
- //qDebug() << " - Render Page:" << num;
+ qDebug() << " - Render Page:" << num;
Poppler::Page *PAGE = doc->page(num);
if(PAGE!=0){
//qDebug() << "DPI:" << dpi << "Size:" << page << "Page Size (pt):" << PAGE->pageSize();
@@ -256,7 +334,8 @@ void MainUI::startPresentation(bool atStart){
presentationLabel->showFullScreen();
ui->actionStop_Presentation->setEnabled(true);
- ui->menuStart_Presentation->setEnabled(false);
+ ui->actionStart_Here->setEnabled(false);
+ ui->actionStart_Begin->setEnabled(false);
updateClock();
clockAct->setVisible(true);
clockTimer->start();
@@ -273,7 +352,7 @@ void MainUI::ShowPage(int page){
endPresentation();
return; //invalid - no document loaded or invalid page specified
}
- WIDGET->setCurrentPage(page+1); //page numbers start at 1 for this widget
+ WIDGET->setCurrentPage(page); //page numbers start at 1 for this widget
//Stop here if no presentation currently running
if(presentationLabel == 0 || !presentationLabel->isVisible()){ return; }
CurrentPage = page;
@@ -296,7 +375,8 @@ void MainUI::endPresentation(){
if(presentationLabel==0 || !presentationLabel->isVisible()){ return; } //not in presentation mode
presentationLabel->hide(); //just hide this (no need to re-create the label for future presentations)
ui->actionStop_Presentation->setEnabled(false);
- ui->menuStart_Presentation->setEnabled(true);
+ ui->actionStart_Here->setEnabled(true);
+ ui->actionStart_Begin->setEnabled(true);
clockTimer->stop();
clockAct->setVisible(false);
this->releaseKeyboard();
@@ -304,15 +384,13 @@ void MainUI::endPresentation(){
void MainUI::startLoadingPages(QPrinter *printer){
if(numPages>0){ return; } //currently loaded[ing]
- //qDebug() << " - Start Loading Pages";
+ qDebug() << " - Start Loading Pages";
numPages = DOC->numPages();
//qDebug() << "numPages:" << numPages;
progress->setRange(0,numPages);
progress->setValue(0);
progAct->setVisible(true);
QRectF pageSize = printer->pageRect(QPrinter::DevicePixel);
- printer->setPageSize(QPageSize(QSize(pageSize.width()*2, pageSize.height()*2)));
- qDebug() << "Starting size" << pageSize.size();
QSize DPI(printer->resolution(),printer->resolution());
/*qDebug() << "Screen Resolutions:";
QList<QScreen*> screens = QApplication::screens();
@@ -320,50 +398,78 @@ void MainUI::startLoadingPages(QPrinter *printer){
qDebug() << screens[i]->name() << screens[i]->logicalDotsPerInchX() << screens[i]->logicalDotsPerInchY();
}*/
for(int i=0; i<numPages; i++){
- //qDebug() << " - Kickoff page load:" << i;
- this->ccw = 0;
+ qDebug() << " - Kickoff page load:" << i;
+ //this->ccw = 0;
QtConcurrent::run(this, &MainUI::loadPage, i, DOC, this, DPI, pageSize.size());
}
}
void MainUI::slotPageLoaded(int page){
+ Q_UNUSED(page);
//qDebug() << "Page Loaded:" << page;
int finished = loadingHash.keys().length();
if(finished == numPages){
progAct->setVisible(false);
- QTimer::singleShot(0, WIDGET, SLOT(updatePreview()));
- qDebug() << "Updating";
+ qDebug() << "Setting Pictures";
+ WIDGET->setPictures(&loadingHash);
+ QTimer::singleShot(10, WIDGET, SLOT(updatePreview()));
+ //qDebug() << "Updating";
ui->actionStop_Presentation->setEnabled(false);
- ui->menuStart_Presentation->setEnabled(true);
+ ui->actionStart_Here->setEnabled(true);
+ ui->actionStart_Begin->setEnabled(true);
}else{
progress->setValue(finished);
}
}
-void MainUI::slotStartPresentation(QAction *act){
+/*void MainUI::slotStartPresentation(QAction *act){
startPresentation(act == ui->actionAt_Beginning);
-}
+}*/
-void MainUI::paintOnWidget(QPrinter *PRINTER){
+void MainUI::paintOnWidget(QPrinter *PRINTER, bool highlight){
+ static bool first = true;
+ static bool shrunk = false;
if(DOC==0){ return; }
- //this->show();
- qDebug() << "Painting";
- qDebug() << numPages << loadingHash.keys().length();
if(loadingHash.keys().length() != numPages){ startLoadingPages(PRINTER); return; }
-
+ //Increase the resolution of the page to match the image to prevent downscaling
+ if(first)
+ PRINTER->setPageSize(QPageSize(PRINTER->pageRect().size()*2));
+ qDebug() << PRINTER->pageRect().size() << loadingHash[0].size() << WIDGET->size();
QPainter painter(PRINTER);
+ painter.setPen(Qt::NoPen);
+ if(ui->findGroup->isVisible()) {
+ QSize size = PRINTER->pageRect().size();
+ size = QSize(size.width(), size.height()-ui->findGroup->height());
+ PRINTER->setPageSize(QPageSize(size));
+ shrunk = true;
+ }else if(shrunk){
+ QSize size = PRINTER->pageRect().size();
+ size = QSize(size.width(), size.height()+ui->findGroup->height());
+ PRINTER->setPageSize(QPageSize(size));
+ shrunk = false;
+ }
+ if(highlight) {
+ Poppler::TextBox *currentText = results.keys()[currentHighlight];
+ int pageNum = results.value(currentText), i;
+
+ for(i = 0; i <= pageNum; i++)
+ if(i != 0){ PRINTER->newPage(); }
+
+ qDebug() << pageNum << i;
+ this->highlight=false;
+ }else {
for(int i=0; i<numPages; i++){
if(i != 0){ PRINTER->newPage(); } //this is the start of the next page (not needed for first)
- if(loadingHash.contains(i)){ painter.drawImage(0,0, loadingHash[i].scaled(PRINTER->pageRect().size(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); qDebug() << PRINTER->pageRect().size();}
- else{ painter.drawImage(0,0, QImage()); }
- if(ccw != 0) {
- QTransform transform;
- transform.rotate((ccw-1) ? 270 : 90);
- painter.setTransform(transform);
- //painter.rotate((ccw-1) ? 270 : 90);
+ if(loadingHash.contains(i)){
+ painter.drawImage(0,0, loadingHash[i].scaled(PRINTER->pageRect().size(),
+ Qt::KeepAspectRatio, Qt::SmoothTransformation));
}
+ else{ painter.drawImage(0,0, QImage()); }
}
- WIDGET->setContextMenuPolicy(Qt::CustomContextMenu);
+ WIDGET->setContextMenuPolicy(Qt::CustomContextMenu);
+ //loadingHash.clear();
+ first = false;
+ }
}
void MainUI::paintToPrinter(QPrinter *PRINTER){
@@ -403,7 +509,6 @@ void MainUI::paintToPrinter(QPrinter *PRINTER){
}
}
//qDebug() << "Final Page Range:" << pageCount;
- //return;
//Generate the sizing information for the printer
QSize sz(PRINTER->pageRect().width(), PRINTER->pageRect().height());
bool landscape = PRINTER->orientation()==QPrinter::Landscape;
@@ -443,32 +548,173 @@ void MainUI::setScroll(bool tog) {
}else{
QApplication::setOverrideCursor(Qt::IBeamCursor);
}
- //WIDGET->
}
-void MainUI::rotate(QPrinter *printer, bool ccw) {
- QRectF pageSize = printer->pageRect(QPrinter::DevicePixel);
- QSize dpi(printer->resolution(),printer->resolution());
- this->ccw = ccw+1;
- for(int i=0; i < numPages; i++)
- QtConcurrent::run(this, &MainUI::loadPage, i, DOC, this, dpi, pageSize.size());
+void MainUI::rotate(bool ccw) {
+ for(int i = 0; i < numPages; i++) {
+ QImage image = loadingHash[i];
+ qDebug() << "Page rotating: " << i;
+ //Setup a rotation matrix that rotates 90 degrees clockwise or counterclockwise
+ QMatrix matrix = (ccw) ? QMatrix(0, -1, 1, 0, 0, 0) : QMatrix(0, 1, -1, 0, 0, 0);
+ image = image.transformed(matrix, Qt::SmoothTransformation);
+ //Updates the image in the hash
+ loadingHash.insert(i, image);
+ }
+ //Rotates the page as well as the image
+ Printer->setOrientation((Printer->orientation() == QPrinter::Landscape) ?
+ QPrinter::Portrait : QPrinter::Landscape);
+
+ QTimer::singleShot(0, WIDGET, SLOT(updatePreview()));
}
void MainUI::updateContextMenu(){
contextMenu->clear();
- int curP = WIDGET->currentPage()-1; //currentPage reports pages starting at 1
- int lastP = numPages-1;
- contextMenu->addSection( QString(tr("Page %1 of %2")).arg(QString::number(curP+1), QString::number(lastP+1) ) );
- contextMenu->addAction(tr("Next Page"), this, SLOT(nextPage()))->setEnabled(curP<lastP);
- contextMenu->addAction(tr("Previous Page"), this, SLOT(prevPage()))->setEnabled( curP>0 );
+ contextMenu->addSection( QString(tr("Page %1 of %2")).arg(QString::number(WIDGET->currentPage()),
+ QString::number(numPages) ) );
+ contextMenu->addAction(ui->actionPrevious_Page);
+ contextMenu->addAction(ui->actionNext_Page);
contextMenu->addSeparator();
- contextMenu->addAction(tr("First Page"), this, SLOT(firstPage()))->setEnabled(curP!=0);
- contextMenu->addAction(tr("Last Page"), this, SLOT(lastPage()))->setEnabled(curP!=lastP);
+ contextMenu->addAction(ui->actionFirst_Page);
+ contextMenu->addAction(ui->actionLast_Page);
contextMenu->addSeparator();
if(presentationLabel==0 || !presentationLabel->isVisible()){
- contextMenu->addAction(tr("Start Presentation (current slide)"), this, SLOT(startPresentationHere()) );
- contextMenu->addAction(tr("Start Presentation (at beginning)"), this, SLOT(startPresentationBeginning()) );
+ contextMenu->addAction(ui->actionStart_Begin);
+ contextMenu->addAction(ui->actionStart_Here);
}else{
- contextMenu->addAction(tr("Stop Presentation"), this, SLOT(closePresentation()) );
+ contextMenu->addAction(ui->actionStop_Presentation);
}
}
+
+void MainUI::keyPressEvent(QKeyEvent *event){
+ //See if this is one of the special hotkeys and act appropriately
+ bool inPresentation = (presentationLabel!=0);
+ if( event->key()==Qt::Key_Escape || event->key()==Qt::Key_Backspace){
+ if(inPresentation){ endPresentation(); }
+ }else if(event->key()==Qt::Key_Right || event->key()==Qt::Key_Space ||
+ event->key()==Qt::Key_PageDown){
+ nextPage();
+ }else if(event->key()==Qt::Key_Left || event->key()==Qt::Key_PageUp){
+ prevPage();
+ }else if(event->key()==Qt::Key_Home){
+ firstPage();
+ }else if(event->key()==Qt::Key_End){
+ lastPage();
+ }else if(event->key()==Qt::Key_F11){
+ if(inPresentation){ endPresentation(); }
+ else{ startPresentationHere(); }
+ }else if(event->key() == Qt::Key_Up) {
+ //Scroll the widget up
+ }else if(event->key() == Qt::Key_Down) {
+ //Scroll the widget down
+ /*qDebug() << "Send Wheel Event";
+ QWheelEvent wEvent( WIDGET->mapFromGlobal(QCursor::pos()), QCursor::pos(),QPoint(0,0), QPoint(0,30), 0, Qt::Vertical, Qt::LeftButton, Qt::NoModifier);
+ QApplication::sendEvent(WIDGET, &wEvent);*/
+ }else{
+ QMainWindow::keyPressEvent(event);
+ }
+}
+
+void MainUI::wheelEvent(QWheelEvent *event) {
+ //Scroll the window according to the mouse wheel
+ QMainWindow::wheelEvent(event);
+}
+
+void MainUI::showInformation() {
+ PROPDIALOG = new PropDialog(DOC);
+ PROPDIALOG->show();
+}
+
+void MainUI::find(QString text, bool forward) {
+ if(!text.isEmpty()) {
+ qDebug() << "Finding Text";
+ bool newText = results.empty();
+ bool research = false;
+ if(!newText)
+ research = !results.keys()[0]->text().contains(text);
+ //Clear results if the user gives a new search string
+ if(research)
+ results.clear();
+
+ if(research or newText) {
+ for(int i = 0; i < numPages; i++) {
+ QList<Poppler::TextBox*> textList = DOC->page(i)->textList();
+ for(int j = 0; j < textList.size(); j++) {
+ if(textList[j]->text().contains(text, (matchCase)
+ ? Qt::CaseSensitive : Qt::CaseInsensitive)) {
+ results.insert(textList[j], i);
+ }
+ }
+ }
+ currentHighlight = (forward) ? -1 : results.size();
+ }
+
+ qDebug() << "Jumping to next result";
+ if(!results.empty()) {
+ //Jump to the location of the next or previous textbox and highlight
+ if(forward) {
+ currentHighlight = (currentHighlight + 1) % results.size();
+ }else{
+ currentHighlight--;
+ //Ensure currentHighlight will be between 0 and results.size() - 1
+ if(currentHighlight < 0)
+ currentHighlight = results.size() - 1;
+ }
+
+ qDebug() << "Jump to location: " << currentHighlight;
+
+ Poppler::TextBox *currentText = results.keys()[currentHighlight];
+ WIDGET->setCurrentPage(results.value(currentText));
+
+ QTimer::singleShot(0, WIDGET, SLOT(updatePreview()));
+ this->highlight = true;
+ }else{
+ //Print "No results found"
+ }
+ }
+}
+
+void MainUI::enableFind() {
+ if(ui->findGroup->isVisible()) {
+ qDebug() << "Disabling Find";
+ ui->findGroup->setVisible(false);
+ WIDGET->setGeometry(QRect(WIDGET->pos(),
+ QSize(WIDGET->width(), WIDGET->height()+ui->findGroup->height())));
+ QTimer::singleShot(0, WIDGET, SLOT(updatePreview()));
+ this->setFocus();
+ }else{
+ qDebug() << "Enabling Find";
+ ui->findGroup->setGeometry(QRect(QPoint(0, WIDGET->height()-ui->findGroup->height()),
+ QSize(WIDGET->width()-12, ui->findGroup->height())));
+ ui->findGroup->setVisible(true);
+ WIDGET->setGeometry(QRect(WIDGET->pos(),
+ QSize(WIDGET->width(), WIDGET->height()-ui->findGroup->height())));
+
+ QTimer::singleShot(0, WIDGET, SLOT(updatePreview()));
+ ui->findGroup->setFocus();
+ }
+}
+
+void MainUI::showBookmarks() {
+ ui->bookmarksFrame->setVisible(true);
+}
+
+void MainUI::resizeEvent(QResizeEvent *event) {
+ if(ui->findGroup->isVisible()) {
+ ui->findGroup->setGeometry(QRect(QPoint(0, WIDGET->height()-ui->findGroup->height()),
+ QSize(WIDGET->width()-10, ui->findGroup->height())));
+ }
+ QMainWindow::resizeEvent(event);
+}
+
+void MainUI::highlightText(QPrinter *PRINTER) {
+ Poppler::TextBox *currentText = results.keys()[currentHighlight];
+ QPainter painter(PRINTER);
+ painter.setPen(Qt::NoPen);
+ int pageNum = results.value(currentText), i;
+
+ for(i = 0; i <= pageNum; i++)
+ if(i != 0){ PRINTER->newPage(); }
+
+ qDebug() << pageNum << i;
+ this->highlight=false;
+}
bgstack15