⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qpdf.cpp

📁 爱可视605看PDF程式源代码, 基于APDF
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <qwindowsystem_qws.h>#include <qgfx_qws.h>#include <qapplication.h>#include <qwidgetstack.h>#include <qtimer.h>#include <qfileinfo.h>#include <qstring.h>#include <qthread.h>#include <qlayout.h>#include <qlabel.h>#include <stdlib.h>#include <qtextcodec.h>#include <poppler/poppler-qt.h>#include <qpushbutton.h>#include <linux/fb.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/ioctl.h>#include <unistd.h>#include <errno.h>#include <archos/screen.h>#include <archos/atr.h>#include "qpdf.h"#include "gotopage.h"#include "general/sidemenu.h"#include "general/style.h"#include "general/spinbar.h"#include "general/fontchooser.h"using namespace Poppler;using namespace archos;#define HIDE_ENTRY		0#define HOME_ENTRY		1#define ZIN_ENTRY		2#define ZOUT_ENTRY		3#define LBACK_ENTRY		4#define GOTOPAGE_ENTRY		5#define NPAGE_ENTRY		6#define PPAGE_ENTRY		7static const char *tr_path = "/tmp/pdf.trex";int main ( int argc, char **argv )	{	QApplication app(argc, argv);	QWSServer::setDesktopBackground(QColor(123, 123, 123));  // gray	if (atr_load(tr_path) ) {		qWarning("failed to load translations!\n");		return 1;	}	qApp->setFont(FontChooser::getFont());	QStringList args;	for (int i = 1; i < argc; i++) {		args.append(QString::fromUtf8(argv[i]));	}	QStringList file_arg = args.grep("-file=", 1);	if (file_arg.count() != 1) {		return -1;	}	QString file(file_arg[0].remove(0, 6));	int time12 = 0;	if (args.contains("-time=12h") ) {		time12 = 1;	}	int cancelSetZoom = 0;	if ( args.contains("-cancelSetZoom") ) {		cancelSetZoom = 1;	}	QPdfDlg *dlg = new QPdfDlg(time12, cancelSetZoom);	app.setMainWidget(dlg);	dlg->showMaximized();	dlg->toggleVideo();  // adjust fb4 to the current setting of fb0	dlg->openFile(file);	return app.exec();}QPdfDlg::QPdfDlg(int time12, int cancelSetZoom) : QWidget(NULL, "mainwidget", QWidget::WStyle_Customize | QWidget::WStyle_NoBorder)	, m_docLoaded(false)	, m_pages(0)	, m_doc(0)	, m_time12Flag(time12)	, m_cancelSetZoom(cancelSetZoom){#ifndef SIM	avossocket = archos::AvosSocket::getInstance();	if ( avossocket->start() ) {		qWarning("failed to setup the avossocket");		qApp->quit();	}	connect(avossocket, SIGNAL(packetReady(extapp_msg_t*)), this, SLOT(handleMsg(extapp_msg_t*)));	QTimer *timer = new QTimer( this );	connect( timer, SIGNAL(timeout()), this, SLOT(timerDone()) );	timer->start( 2000, TRUE );	if ( avossocket ) {		extapp_msg_t msg = { { EXTAPP_MAGIC, EXTAPP_PACKET_REQUEST_BATTERY_STATUS, 0 }, NULL };		avossocket->sendMsg( &msg );	}#endif	m_mode = Screen::mode();	QLayout *l = new QVBoxLayout(this, 0, 0);	pdfWidget = new PDFWidget(0, this, "pdfWidget", false);	l->add(pdfWidget);	createSpinbar();	spinbar->hide();	createGotoPage();	gotoPage->hide();	createMenu();	sideMenu->hide();	qApp->installEventFilter(this);	connect(pdfWidget, SIGNAL(rendererRunning(bool)), this, SLOT(rendererRunning(bool)));	connect(pdfWidget, SIGNAL(isLastPage(bool)), this, SLOT(isLastPage(bool)));	connect(pdfWidget, SIGNAL(isFirstPage(bool)), this, SLOT(isFirstPage(bool)));	connect(pdfWidget, SIGNAL(zoomChanged()), this, SLOT(zoomChanged()));	connect(pdfWidget, SIGNAL(pagesInHistory(bool)), this, SLOT(pagesInHistory(bool)));}QPdfDlg::~QPdfDlg(){	delete m_doc;	delete sideMenu;	delete spinbar;	delete gotoPage;}void QPdfDlg::reloadLanguage(char* lang){	if ( lang && strlen(lang) > 2 ) {		setenv("LANG", lang, 1);		setenv("LC_ALL", lang, 1);		qWarning("locale changed to '%s'", lang);		atr_unload();		if (atr_load(tr_path) ) {			qWarning("failed to load translations!\n");		}		qApp->setFont(FontChooser::getFont(lang));		restartGui();	}}void QPdfDlg::handleMsg(extapp_msg_t* msg){	extapp_msg_timeformat_t t;	switch ( msg->header.packet_type ) {		case EXTAPP_PACKET_LANG_CHANGED:			reloadLanguage((char*)msg->data);			break;		case EXTAPP_PACKET_BATTERY_STATUS:			qWarning("** New battery status 0x%x\n", *((int*)msg->data));			emit signalBatteryLevel( *((int*) msg->data) );			break;		case EXTAPP_PACKET_TIMEFORMAT_CHANGED:			qWarning("** New timeformat 0x%x\n", *((int*)msg->data));			t = *(extapp_msg_timeformat_t*)msg->data;			emit updateTime12(t == time24 ? 0 : 1 );			break;		case EXTAPP_PACKET_TERMINATE:			qWarning("shutting down...");			qApp->quit();			break;		default:			qWarning("apdf: unkown message (%x).\n", msg->header.packet_type);			break;	}	avossocket->freeMsg(msg);}bool QPdfDlg::eventFilter(QObject *target, QEvent *event){	if (gotoPage->isVisible() && target == pdfWidget->viewport() && 			event->type() == QEvent::MouseButtonPress) {		gotoPage->hide();		sideMenu->show();		pdfWidget->jumpToPage(gotoPage->selectedPage() - 1);	}	else if (target == pdfWidget->viewport() && event->type() == QEvent::MouseButtonPress) {		sideMenu->hideLabels();	}	else if (target == pdfWidget->viewport() && 		(event->type() == QEvent::MouseMove || event->type() == QEvent::MouseButtonRelease)) {		sideMenu->strobeHideTimer();	}	else if ((event->type() == QEvent::KeyRelease ||		( event->type() == QEvent::KeyPress && ((QKeyEvent*)event)->isAutoRepeat())) &&		((QKeyEvent*)event)->key() == Key_F6)	{		toggleVideo();		return true;	}	return QWidget::eventFilter(target, event);}void QPdfDlg::timerDone(void){	extapp_msg_t msg = { { EXTAPP_MAGIC, EXTAPP_PACKET_STARTUP_READY, 0 }, NULL };	avossocket->sendMsg(&msg);}bool QPdfDlg::event(QEvent* e){	static int last_key = -1;	static int press_rep_factor = 1;	bool handled = false;	if (pdfWidget && pdfWidget->isVisible()) {		if (e->type() == QEvent::KeyRelease ||				(e->type() == QEvent::KeyPress && ((QKeyEvent*)e)->isAutoRepeat()) ) {			QKeyEvent* keyEvent = (QKeyEvent*)e;			sideMenu->strobeHideTimer();			// till the docLoader hasn't finished ESC is the only input			if (!m_docLoaded) {				if (keyEvent->key() == Key_F2) {					close();					handled = true;				}			}			else {				// if the user keeps one of the direction keys pressed				// increase the scrolling speed.				int rep_factor = 1;				if ( e->type() == QEvent::KeyPress ) {					if (  last_key == -1 ) {						last_key = keyEvent->key();					}					else {						if ( last_key == keyEvent->key() ) {							press_rep_factor = press_rep_factor + 1 <= 3 ? press_rep_factor + 1 : 3;						}						else {							last_key = -1;							press_rep_factor = 1;						}					}					rep_factor = press_rep_factor;				}				else {					last_key = -1;					press_rep_factor = 1;				}				switch (keyEvent->key()) {					case Key_Up:						pdfWidget->scrollUp(rep_factor);						handled = true;						break;					case Key_Down:						pdfWidget->scrollDown(rep_factor);						handled = true;						break;					case Key_Left:						pdfWidget->scrollLeft(rep_factor);						handled = true;						break;					case Key_Right:						pdfWidget->scrollRight(rep_factor);						handled = true;						break;					case Key_Return:						pdfWidget->followLink();						handled = true;						break;					case Key_PageUp:						pdfWidget->prevPage();						handled = true;						break;					case Key_PageDown:						pdfWidget->nextPage();						handled = true;						break;					case Key_F1:	// having an autorepeat on the menu key is cumbersome.						if (!keyEvent->isAutoRepeat()) {							sideMenu->showMenuAndLabels();							handled = true;						}						break;					case Key_F2:						if (pdfWidget->zoomIsDefault()) {							close();						}						else {							pdfWidget->setFitToWidth();						}						handled = true;						break;#ifdef SIM// 					// spinbar debugging					case Key_F11:						spinbar->setText("test123");						spinbar->start();						spinbar->show();						break;					case Key_F12:						spinbar->hide();						spinbar->stop();						break;#endif					default:						qWarning("unknown key %x\n", keyEvent->key());						break;				}			}		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -