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

📄 helpbrowser.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2002 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#define QTOPIA_INTERNAL_LANGLIST#include "helpbrowser.h"#include <qtopia/qpeapplication.h>#include <qtopia/resource.h>#include <qtopia/mimetype.h>#include <qtopia/applnk.h>#include <qtopia/global.h>#include <qstatusbar.h>#include <qdragobject.h>#include <qpixmap.h>#include <qpopupmenu.h>#include <qtopia/qpemenubar.h>#include <qtopia/qpetoolbar.h>#include <qtoolbutton.h>#include <qiconset.h>#include <qfile.h>#include <qtextstream.h>#include <qstylesheet.h>#include <qmessagebox.h>#include <qfiledialog.h>#include <qevent.h>#include <qlineedit.h>#include <qobjectlist.h>#include <qfileinfo.h>#include <qfile.h>#include <qdatastream.h>#include <qprinter.h>#include <qsimplerichtext.h>#include <qpaintdevicemetrics.h>#include <qaction.h>#include <ctype.h>HelpBrowser::HelpBrowser( QWidget* parent, const char *name, WFlags f )    : QMainWindow( parent, name, f ),      selectedURL(){    init( "index.html" );}class MagicTextBrowser : public QTextBrowser {public:    MagicTextBrowser(QWidget* parent) :	QTextBrowser(parent)    {    }        void setSource( const QString& source )    {	QTextBrowser::setSource(source);	if ( magic(source,"applications") || magic(source,"games") || magic(source,"settings") ) // No tr	    return;	// Just those are magic (for now). Could do CGI here,	// or in Qtopia's mime source factory.    }    bool magic(const QString& source, const QString& name)    {	if ( name+".html" == source ) {	    QString fn = mimeSourceFactory()->makeAbsolute( source, context() );	    const QMimeSource* m = mimeSourceFactory()->data( fn, context() );	    if ( m ) {		QString txt;		if ( QTextDrag::decode(m,txt) ) {		    QRegExp re("<qtopia-"+name+">.*</qtopia-"+name+">");		    int start,len;		    if ( (start=re.match(txt,0,&len))>=0 ) {			QString generated = generate(name);			txt.replace(start,len,generated);			setText(txt);			return TRUE;		    }		}	    }	}	return FALSE;    }    QString generate(const QString& name) const    {	QString dir = MimeType::appsFolderName()+"/"+name[0].upper()+name.mid(1);	AppLnkSet lnkset(dir);	AppLnk* lnk;	QString r;	for (QListIterator<AppLnk> it(lnkset.children()); (lnk=it.current()); ++it) {	    QString name = lnk->name();	    QString icon = lnk->icon();	    QString helpFile = lnk->exec()+".html";	    QStringList helpPath = Global::helpPath();	    bool helpExists = FALSE;	    for (QStringList::ConstIterator it=helpPath.begin(); it!=helpPath.end() && !helpExists; ++it)		helpExists = QFile::exists( *it + "/" + helpFile );	    if ( helpExists ) {		r += "<h3><a href="+helpFile+"><img src="+icon+">"+name+"</a></h3>\n";	    }	}	return r;    }};void HelpBrowser::init( const QString& _home ){    setIcon( Resource::loadPixmap( "HelpBrowser" ) );    setBackgroundMode( PaletteButton );    browser = new MagicTextBrowser( this );    browser->setFrameStyle( QFrame::Panel | QFrame::Sunken );    connect( browser, SIGNAL( textChanged() ),	     this, SLOT( textChanged() ) );    setCentralWidget( browser );    setToolBarsMovable( FALSE );    if ( !_home.isEmpty() )	browser->setSource( _home );    QPEToolBar* toolbar = new QPEToolBar( this );    toolbar->setHorizontalStretchable( TRUE );    QPEMenuBar *menu = new QPEMenuBar( toolbar );    toolbar = new QPEToolBar( this );    // addToolBar( toolbar, "Toolbar");    //QPopupMenu* go = new QPopupMenu( this );    backAction = new QAction( tr( "Backward" ), Resource::loadIconSet( "back" ), QString::null, 0, this, 0 );    connect( backAction, SIGNAL( activated() ), browser, SLOT( backward() ) );    connect( browser, SIGNAL( backwardAvailable( bool ) ),	     backAction, SLOT( setEnabled( bool ) ) );    //backAction->addTo( go );    backAction->addTo( toolbar );    backAction->setEnabled( FALSE );    forwardAction = new QAction( tr( "Forward" ), Resource::loadIconSet( "forward" ), QString::null, 0, this, 0 );    connect( forwardAction, SIGNAL( activated() ), browser, SLOT( forward() ) );    connect( browser, SIGNAL( forwardAvailable( bool ) ),	     forwardAction, SLOT( setEnabled( bool ) ) );    //forwardAction->addTo( go );    forwardAction->addTo( toolbar );    forwardAction->setEnabled( FALSE );    QAction *a = new QAction( tr( "Home" ), Resource::loadIconSet( "home" ), QString::null, 0, this, 0 );    connect( a, SIGNAL( activated() ), browser, SLOT( home() ) );    //a->addTo( go );    a->addTo( toolbar );    bookm = new QPopupMenu( this );    bookm->insertItem( tr( "Add Bookmark" ), this, SLOT( addBookmark() ) );    bookm->insertItem( tr( "Remove from Bookmarks" ), this, SLOT( removeBookmark() ) );    bookm->insertSeparator();    connect( bookm, SIGNAL( activated( int ) ),	     this, SLOT( bookmChosen( int ) ) );    readBookmarks();    //menu->insertItem( tr("Go"), go );    menu->insertItem( tr( "Bookmarks" ), bookm );    resize( 240, 300 );    browser->setFocus();    browser->setFrameStyle( QFrame::NoFrame );    connect( qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)),	     this, SLOT(appMessage(const QCString&, const QByteArray&)) );}void HelpBrowser::appMessage(const QCString& msg, const QByteArray& data){    if ( msg == "showFile(QString)" ) {	QDataStream ds(data,IO_ReadOnly);	QString fn;	ds >> fn;	setDocument( fn );    }}void HelpBrowser::setDocument( const QString &doc ){    if ( !doc.isEmpty() )	browser->setSource( doc );    raise();    }void HelpBrowser::textChanged(){    if ( browser->documentTitle().isNull() )	setCaption( tr("Help Browser") );    else	setCaption( browser->documentTitle() ) ;    selectedURL = caption();}HelpBrowser::~HelpBrowser(){    QStringList bookmarks;    QMap<int, Bookmark>::Iterator it2 = mBookmarks.begin();    for ( ; it2 != mBookmarks.end(); ++it2 )	bookmarks.append( (*it2).name + "=" + (*it2).file );    QFile f2( Global::applicationFileName("helpbrowser", "bookmarks") );    if ( f2.open( IO_WriteOnly ) ) {	QDataStream s2( &f2 );	s2 << bookmarks;	f2.close();    }}void HelpBrowser::pathSelected( const QString &_path ){    browser->setSource( _path );}void HelpBrowser::readBookmarks(){    QString file = Global::applicationFileName("helpbrowser", "bookmarks");    if ( QFile::exists( file ) ) {	QStringList bookmarks;	QFile f( file );	if ( f.open( IO_ReadOnly ) ) {	    QDataStream s( &f );	    s >> bookmarks;	    f.close();	}	QStringList::Iterator it = bookmarks.begin();	for ( ; it != bookmarks.end(); ++it ) {	    Bookmark b;	    QString current = *it;	    int equal = current.find( "=" );	    if ( equal < 1 || equal == (int)current.length() - 1 )		continue;	    b.name = current.left( equal );	    b.file = current.mid( equal + 1 );	    mBookmarks[ bookm->insertItem( b.name ) ] = b;	}     }}void HelpBrowser::bookmChosen( int i ){    if ( mBookmarks.contains( i ) )	browser->setSource( mBookmarks[ i ].file );}void HelpBrowser::addBookmark(){    Bookmark b;    b.name = browser->documentTitle();    b.file = browser->source();    if (b.name.isEmpty() ) {	b.name = b.file.left( b.file.length() - 5 ); // remove .html    }    QMap<int, Bookmark>::Iterator it;    for( it = mBookmarks.begin(); it != mBookmarks.end(); ++it )	if ( (*it).file == b.file ) return;    mBookmarks[ bookm->insertItem( b.name ) ] = b;}void HelpBrowser::removeBookmark(){    QString file = browser->source();    QMap<int, Bookmark>::Iterator it = mBookmarks.begin();    for( ; it != mBookmarks.end(); ++it )	if ( (*it).file == file ) {	    bookm->removeItem( it.key() );	    mBookmarks.remove( it );		break;	}}

⌨️ 快捷键说明

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