📄 qpdf.cpp
字号:
} if (!handled) return QWidget::event(e); return true;}void QPdfDlg::toggleVideo(void){#ifndef SIM static int old_w = 0, old_h = 0; int fd = ::open("/dev/fb0", O_RDWR); if (fd < 0) { qWarning("Can't open framebuffer device /dev/fb0"); return; } fb_var_screeninfo vinfo; memset( &vinfo, 0, sizeof(fb_var_screeninfo) ); if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo)) { qFatal("Error reading variable information in card init"); ::close(fd); return; } ::close(fd); int w = vinfo.xres; int h = vinfo.yres; int d = vinfo.bits_per_pixel; qWarning("__fb0 read w = %i h = %i d = %i\n", w, h, d); if (w == old_w && h == old_h) { qWarning("mode hasn't changed"); return; } old_w = w; old_h = h; qt_screen->setMode(w, h, d); QWSServer::beginDisplayReconfigure(); QWSServer::endDisplayReconfigure();#endif}void QPdfDlg::rendererRunning(bool running){ if (running) { spinbar->start(); spinbar->setText(QString::fromUtf8(atr("pdf_prep_page")).arg(pdfWidget->getPageNumber()).arg(pdfWidget->getNumPages())); spinbar->show(); } else { spinbar->stop(); spinbar->setText(""); spinbar->hide(); }}class DocumentLoader : public QThread { public : DocumentLoader(QString docPath, QObject *master) : QThread() , m_master(master) , m_docPath(docPath) {} virtual void run() { qWarning("DocumentLoader: trying to load %s", m_docPath.ascii()); Poppler::Document *doc = Poppler::Document::load(m_docPath); if (doc) { QApplication::postEvent(m_master, new QCustomEvent((QEvent::Type)DocLoaded, doc)); } else { QApplication::postEvent(m_master, new QCustomEvent((QEvent::Type)DocLoaded, 0)); } } private: QObject *m_master; QString m_docPath;};void QPdfDlg::customEvent(QCustomEvent *e){ if ((int)e->type() == DocLoaded) { docLoaded((Poppler::Document*)e->data()); } else { QWidget::customEvent(e); }}void QPdfDlg::docLoaded(Poppler::Document* d){ if (d) { m_doc = d; qWarning("document loaded"); m_pages = m_doc->getNumPages(); sideMenu->setEntryVisible(PPAGE_ENTRY, 0); sideMenu->setEntryVisible(NPAGE_ENTRY, m_pages > 1); sideMenu->setEntryVisible(GOTOPAGE_ENTRY, m_pages > 1); pdfWidget->setDocument(m_doc, FIT_TO_WIDTH); sideMenu->show(); m_docLoaded = true; } else { qWarning("failed to load document"); spinbar->stop(); spinbar->setText(""); spinbar->hide(); exit(1); }}void QPdfDlg::openFile(const QString &f){ QFileInfo fi(f); if (fi.exists()) { delete m_doc; m_doc = 0; m_loader = new DocumentLoader(f, this); spinbarLoading(); m_loader->start(); } else { qWarning("Couldn't open file '%s'!", f.ascii()); exit(1); }}void QPdfDlg::spinbarLoading(void){ spinbar->start(); spinbar->setText(QString::fromUtf8(atr("pdf_loading_document"))); spinbar->show();}void QPdfDlg::isFirstPage(bool first) { if (first) { sideMenu->setEntryVisible(PPAGE_ENTRY, 0); } else { sideMenu->setEntryVisible(PPAGE_ENTRY, 1); }}void QPdfDlg::isLastPage(bool last) { if (last) { sideMenu->setEntryVisible(NPAGE_ENTRY, 0); } else { sideMenu->setEntryVisible(NPAGE_ENTRY, 1); }}void QPdfDlg::pagesInHistory(bool page){ if (page) { sideMenu->setEntryVisible(LBACK_ENTRY, 1); } else { sideMenu->setEntryVisible(LBACK_ENTRY, 0); }}// private slotvoid QPdfDlg::zoomChanged() { if (pdfWidget->zoomIsUpperBound()) { sideMenu->setEntryVisible(ZIN_ENTRY, 0); } else { sideMenu->setEntryVisible(ZIN_ENTRY, 1); } if (pdfWidget->zoomIsLowerBound()) { sideMenu->setEntryVisible(ZOUT_ENTRY, 0); } else { sideMenu->setEntryVisible(ZOUT_ENTRY, 1); }}void QPdfDlg::createMenu(){ sideMenu = new SideMenu(8, this, "side menu"); sideMenu->setBackgroundColor(QColor(90, 90, 120)); setupMenuItems(sideMenu); int dw = qt_screen->width(); int dh = qt_screen->height(); int mw = sideMenu->sizeHint().width(); sideMenu->setGeometry(dw - mw, 0, mw, dh); QSize s; if (Screen::mode() == wqvga || Screen::mode() == qvga) { s = QSize(30, 30); } else { // wvga s = QSize(60, 60); } pdfWidget->setHotspot(s); connect(sideMenu, SIGNAL(entryActivated(int)), this, SLOT(onMenuEntryActivated(int))); connect(gotoPage, SIGNAL(closed()), sideMenu, SLOT(show())); connect(pdfWidget, SIGNAL(hotspot()), sideMenu, SLOT(showMenuAndLabels()));}void QPdfDlg::disconnectSignals(void){ disconnect(sideMenu, 0, 0, 0); disconnect(gotoPage, 0, 0, 0); disconnect(pdfWidget, 0, sideMenu, 0);}void QPdfDlg::setupMenuItems(SideMenu *smenu){ QString path = Screen::prefix(); smenu->setEntry(HIDE_ENTRY, 1, hide, QString::fromUtf8(atr("pdf_hide_overlay")), path + "apdf/label_photo_hide_osd"); smenu->setEntry(HOME_ENTRY, 1, home, QString::fromUtf8(atr("pdf_home")), path + "apdf/label_home"); int enabled = !pdfWidget->zoomIsUpperBound(); smenu->setEntry(ZIN_ENTRY, enabled, zin, QString::fromUtf8(atr("pdf_zoom_in")), path + "apdf/label_zoom_in"); enabled = !pdfWidget->zoomIsLowerBound(); smenu->setEntry(ZOUT_ENTRY, enabled, zout, QString::fromUtf8(atr("pdf_zoom_out")), path + "apdf/label_zoom_out"); enabled = pdfWidget->getPageNumber() > 1; smenu->setEntry(PPAGE_ENTRY, enabled, prevpage, QString::fromUtf8(atr("pdf_prev_page")), path + "apdf/label_arrow_left"); enabled = pdfWidget->getPageNumber() < pdfWidget->getNumPages(); smenu->setEntry(NPAGE_ENTRY, enabled, nextpage, QString::fromUtf8(atr("pdf_next_page")), path + "apdf/label_arrow_right"); enabled = pdfWidget->arePagesInHistory(); smenu->setEntry(LBACK_ENTRY, enabled, linkback, QString::fromUtf8(atr("pdf_link_back")), path + "apdf/label_link_back"); enabled = pdfWidget->getNumPages() > 1; smenu->setEntry(GOTOPAGE_ENTRY, enabled, gotopage, QString::fromUtf8(atr("pdf_goto_page")), path + "apdf/label_goto_page");}void QPdfDlg::createGotoPage(){ gotoPage = new GotoPage(0, 0, m_cancelSetZoom, this); connect(gotoPage, SIGNAL(gotoPage(int)), pdfWidget, SLOT(jumpToPage(int)));}void QPdfDlg::createSpinbar(){ spinbar = new Spinbar(this, 400, 40); spinbar->move(15, qt_screen->height() - 15 - spinbar->height());}void QPdfDlg::resizeEvent(QResizeEvent *){ qWarning("Screen::mode = %i, m_mode = %i\n", Screen::mode(), m_mode); if (Screen::mode() != m_mode) { m_mode = Screen::mode(); qWarning("new screen mode\n"); restartGui(); }}void QPdfDlg::restartGui(void){ disconnectSignals(); delete spinbar; createSpinbar(); if (m_doc) { rendererRunning(pdfWidget->rendererRunning()); } else { spinbarLoading(); } delete gotoPage; createGotoPage(); delete sideMenu; createMenu(); sideMenu->show(); int dw = qt_screen->width(); int dh = qt_screen->height(); qWarning("desktop %ix%i\n", dw, dh); int mw = sideMenu->sizeHint().width(); sideMenu->setGeometry(dw - mw, 0, mw, dh); pdfWidget->resize(dw, dh);}void QPdfDlg::onMenuEntryActivated(int id) { extapp_msg_t msg; switch(id) { case zin : pdfWidget->zoomIn(); break; case zout : pdfWidget->zoomOut(); break; case prevpage : pdfWidget->prevPage(); break; case nextpage : pdfWidget->nextPage(); break; case linkback : pdfWidget->moveBack(); break; case gotopage : sideMenu->hide(); gotoPage->setValues(pdfWidget->getNumPages(), pdfWidget->getPageNumber()); gotoPage->show(); break; case home: msg.header.magic = EXTAPP_MAGIC; msg.header.packet_type = EXTAPP_PACKET_TOGGLE_VISIBLE; msg.header.data_length = 0; msg.data = NULL; avossocket->sendMsg(&msg); break; case hide: sideMenu->hide(); break; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -