diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-07-10 15:24:15 -0500 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-07-10 15:24:15 -0500 |
commit | bd0f3345a938b35ce6a12f6150373b0955b8dd12 (patch) | |
tree | 7a520322212d48ebcb9fbe1087e7fca28b76185c /examples/helpviewer | |
download | qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.tar.gz qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.zip |
Add Qt3 development HEAD version
Diffstat (limited to 'examples/helpviewer')
-rw-r--r-- | examples/helpviewer/back.xpm | 27 | ||||
-rw-r--r-- | examples/helpviewer/forward.xpm | 28 | ||||
-rw-r--r-- | examples/helpviewer/helpviewer.doc | 28 | ||||
-rw-r--r-- | examples/helpviewer/helpviewer.pro | 11 | ||||
-rw-r--r-- | examples/helpviewer/helpwindow.cpp | 315 | ||||
-rw-r--r-- | examples/helpviewer/helpwindow.h | 63 | ||||
-rw-r--r-- | examples/helpviewer/home.xpm | 27 | ||||
-rw-r--r-- | examples/helpviewer/main.cpp | 41 |
8 files changed, 540 insertions, 0 deletions
diff --git a/examples/helpviewer/back.xpm b/examples/helpviewer/back.xpm new file mode 100644 index 0000000..7dc5b72 --- /dev/null +++ b/examples/helpviewer/back.xpm @@ -0,0 +1,27 @@ +/* XPM */ +/* Drawn by Mark Donohoe for the K Desktop Environment */ +/* See http://www.kde.org */ +static char*back[]={ +"16 16 5 1", +"# c #000000", +"a c #ffffff", +"c c #808080", +"b c #c0c0c0", +". c None", +"................", +".......#........", +"......##........", +".....#a#........", +"....#aa########.", +"...#aabaaaaaaa#.", +"..#aabbbbbbbbb#.", +"...#abbbbbbbbb#.", +"...c#ab########.", +"....c#a#ccccccc.", +".....c##c.......", +"......c#c.......", +".......cc.......", +"........c.......", +"................", +"......................"}; + diff --git a/examples/helpviewer/forward.xpm b/examples/helpviewer/forward.xpm new file mode 100644 index 0000000..2ed8134 --- /dev/null +++ b/examples/helpviewer/forward.xpm @@ -0,0 +1,28 @@ +/* XPM */ +/* Drawn by Mark Donohoe for the K Desktop Environment */ +/* See http://www.kde.org */ +static char*forward[]={ +"16 16 5 1", +"# c #000000", +"a c #ffffff", +"c c #808080", +"b c #c0c0c0", +". c None", +"................", +"................", +".........#......", +".........##.....", +".........#a#....", +"..########aa#...", +"..#aaaaaaabaa#..", +"..#bbbbbbbbbaa#.", +"..#bbbbbbbbba#..", +"..########ba#c..", +"..ccccccc#a#c...", +"........c##c....", +"........c#c.....", +"........cc......", +"........c.......", +"................", +"................"}; + diff --git a/examples/helpviewer/helpviewer.doc b/examples/helpviewer/helpviewer.doc new file mode 100644 index 0000000..b3d344b --- /dev/null +++ b/examples/helpviewer/helpviewer.doc @@ -0,0 +1,28 @@ +/* +*/ +/*! \page helpviewer-example.html + + \ingroup examples + \title Simple HTML Help Browser + + This example implements a simple HTML help browser using + Qt's richtext capabilities. + + <hr> + + Header file: + + \include helpviewer/helpwindow.h + + <hr> + + Implementation: + + \include helpviewer/helpwindow.cpp + + <hr> + + Main: + + \include helpviewer/main.cpp +*/ diff --git a/examples/helpviewer/helpviewer.pro b/examples/helpviewer/helpviewer.pro new file mode 100644 index 0000000..580a604 --- /dev/null +++ b/examples/helpviewer/helpviewer.pro @@ -0,0 +1,11 @@ +TEMPLATE = app +TARGET = helpviewer + +CONFIG += qt warn_on release +DEPENDPATH = ../../include + +REQUIRES = large-config + +HEADERS = helpwindow.h +SOURCES = helpwindow.cpp \ + main.cpp diff --git a/examples/helpviewer/helpwindow.cpp b/examples/helpviewer/helpwindow.cpp new file mode 100644 index 0000000..2e0a9ea --- /dev/null +++ b/examples/helpviewer/helpwindow.cpp @@ -0,0 +1,315 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#include "helpwindow.h" +#include <qstatusbar.h> +#include <qpixmap.h> +#include <qpopupmenu.h> +#include <qmenubar.h> +#include <qtoolbar.h> +#include <qtoolbutton.h> +#include <qiconset.h> +#include <qfile.h> +#include <qtextstream.h> +#include <qstylesheet.h> +#include <qmessagebox.h> +#include <qfiledialog.h> +#include <qapplication.h> +#include <qcombobox.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 <qpainter.h> +#include <qpaintdevicemetrics.h> + +#include <ctype.h> + +HelpWindow::HelpWindow( const QString& home_, const QString& _path, + QWidget* parent, const char *name ) + : QMainWindow( parent, name, WDestructiveClose ), + pathCombo( 0 ) +{ + readHistory(); + readBookmarks(); + + browser = new QTextBrowser( this ); + + browser->mimeSourceFactory()->setFilePath( _path ); + browser->setFrameStyle( QFrame::Panel | QFrame::Sunken ); + connect( browser, SIGNAL( sourceChanged(const QString& ) ), + this, SLOT( sourceChanged( const QString&) ) ); + + setCentralWidget( browser ); + + if ( !home_.isEmpty() ) + browser->setSource( home_ ); + + connect( browser, SIGNAL( highlighted( const QString&) ), + statusBar(), SLOT( message( const QString&)) ); + + resize( 640,700 ); + + QPopupMenu* file = new QPopupMenu( this ); + file->insertItem( tr("&New Window"), this, SLOT( newWindow() ), CTRL+Key_N ); + file->insertItem( tr("&Open File"), this, SLOT( openFile() ), CTRL+Key_O ); + file->insertItem( tr("&Print"), this, SLOT( print() ), CTRL+Key_P ); + file->insertSeparator(); + file->insertItem( tr("&Close"), this, SLOT( close() ), CTRL+Key_Q ); + file->insertItem( tr("E&xit"), qApp, SLOT( closeAllWindows() ), CTRL+Key_X ); + + // The same three icons are used twice each. + QIconSet icon_back( QPixmap("back.xpm") ); + QIconSet icon_forward( QPixmap("forward.xpm") ); + QIconSet icon_home( QPixmap("home.xpm") ); + + QPopupMenu* go = new QPopupMenu( this ); + backwardId = go->insertItem( icon_back, + tr("&Backward"), browser, SLOT( backward() ), + CTRL+Key_Left ); + forwardId = go->insertItem( icon_forward, + tr("&Forward"), browser, SLOT( forward() ), + CTRL+Key_Right ); + go->insertItem( icon_home, tr("&Home"), browser, SLOT( home() ) ); + + QPopupMenu* help = new QPopupMenu( this ); + help->insertItem( tr("&About"), this, SLOT( about() ) ); + help->insertItem( tr("About &Qt"), this, SLOT( aboutQt() ) ); + + hist = new QPopupMenu( this ); + QStringList::Iterator it = history.begin(); + for ( ; it != history.end(); ++it ) + mHistory[ hist->insertItem( *it ) ] = *it; + connect( hist, SIGNAL( activated( int ) ), + this, SLOT( histChosen( int ) ) ); + + bookm = new QPopupMenu( this ); + bookm->insertItem( tr( "Add Bookmark" ), this, SLOT( addBookmark() ) ); + bookm->insertSeparator(); + + QStringList::Iterator it2 = bookmarks.begin(); + for ( ; it2 != bookmarks.end(); ++it2 ) + mBookmarks[ bookm->insertItem( *it2 ) ] = *it2; + connect( bookm, SIGNAL( activated( int ) ), + this, SLOT( bookmChosen( int ) ) ); + + menuBar()->insertItem( tr("&File"), file ); + menuBar()->insertItem( tr("&Go"), go ); + menuBar()->insertItem( tr( "History" ), hist ); + menuBar()->insertItem( tr( "Bookmarks" ), bookm ); + menuBar()->insertSeparator(); + menuBar()->insertItem( tr("&Help"), help ); + + menuBar()->setItemEnabled( forwardId, FALSE); + menuBar()->setItemEnabled( backwardId, FALSE); + connect( browser, SIGNAL( backwardAvailable( bool ) ), + this, SLOT( setBackwardAvailable( bool ) ) ); + connect( browser, SIGNAL( forwardAvailable( bool ) ), + this, SLOT( setForwardAvailable( bool ) ) ); + + + QToolBar* toolbar = new QToolBar( this ); + addToolBar( toolbar, "Toolbar"); + QToolButton* button; + + button = new QToolButton( icon_back, tr("Backward"), "", browser, SLOT(backward()), toolbar ); + connect( browser, SIGNAL( backwardAvailable(bool) ), button, SLOT( setEnabled(bool) ) ); + button->setEnabled( FALSE ); + button = new QToolButton( icon_forward, tr("Forward"), "", browser, SLOT(forward()), toolbar ); + connect( browser, SIGNAL( forwardAvailable(bool) ), button, SLOT( setEnabled(bool) ) ); + button->setEnabled( FALSE ); + button = new QToolButton( icon_home, tr("Home"), "", browser, SLOT(home()), toolbar ); + + toolbar->addSeparator(); + + pathCombo = new QComboBox( TRUE, toolbar ); + connect( pathCombo, SIGNAL( activated( const QString & ) ), + this, SLOT( pathSelected( const QString & ) ) ); + toolbar->setStretchableWidget( pathCombo ); + setRightJustification( TRUE ); + setDockEnabled( DockLeft, FALSE ); + setDockEnabled( DockRight, FALSE ); + + pathCombo->insertItem( home_ ); + browser->setFocus(); + +} + + +void HelpWindow::setBackwardAvailable( bool b) +{ + menuBar()->setItemEnabled( backwardId, b); +} + +void HelpWindow::setForwardAvailable( bool b) +{ + menuBar()->setItemEnabled( forwardId, b); +} + + +void HelpWindow::sourceChanged( const QString& url ) +{ + if ( browser->documentTitle().isNull() ) + setCaption( "Qt Example - Helpviewer - " + url ); + else + setCaption( "Qt Example - Helpviewer - " + browser->documentTitle() ) ; + + if ( !url.isEmpty() && pathCombo ) { + bool exists = FALSE; + int i; + for ( i = 0; i < pathCombo->count(); ++i ) { + if ( pathCombo->text( i ) == url ) { + exists = TRUE; + break; + } + } + if ( !exists ) { + pathCombo->insertItem( url, 0 ); + pathCombo->setCurrentItem( 0 ); + mHistory[ hist->insertItem( url ) ] = url; + } else + pathCombo->setCurrentItem( i ); + } +} + +HelpWindow::~HelpWindow() +{ + history = mHistory.values(); + + QFile f( QDir::currentDirPath() + "/.history" ); + f.open( IO_WriteOnly ); + QDataStream s( &f ); + s << history; + f.close(); + + bookmarks = mBookmarks.values(); + + QFile f2( QDir::currentDirPath() + "/.bookmarks" ); + f2.open( IO_WriteOnly ); + QDataStream s2( &f2 ); + s2 << bookmarks; + f2.close(); +} + +void HelpWindow::about() +{ + QMessageBox::about( this, "HelpViewer Example", + "<p>This example implements a simple HTML help viewer " + "using Qt's rich text capabilities</p>" + "<p>It's just about 400 lines of C++ code, so don't expect too much :-)</p>" + ); +} + + +void HelpWindow::aboutQt() +{ + QMessageBox::aboutQt( this, "QBrowser" ); +} + +void HelpWindow::openFile() +{ +#ifndef QT_NO_FILEDIALOG + QString fn = QFileDialog::getOpenFileName( QString::null, QString::null, this ); + if ( !fn.isEmpty() ) + browser->setSource( fn ); +#endif +} + +void HelpWindow::newWindow() +{ + ( new HelpWindow(browser->source(), "qbrowser") )->show(); +} + +void HelpWindow::print() +{ +#ifndef QT_NO_PRINTER + QPrinter printer( QPrinter::HighResolution ); + printer.setFullPage(TRUE); + if ( printer.setup( this ) ) { + QPainter p( &printer ); + if( !p.isActive() ) // starting printing failed + return; + QPaintDeviceMetrics metrics(p.device()); + int dpiy = metrics.logicalDpiY(); + int margin = (int) ( (2/2.54)*dpiy ); // 2 cm margins + QRect view( margin, margin, metrics.width() - 2*margin, metrics.height() - 2*margin ); + QSimpleRichText richText( browser->text(), + QFont(), + browser->context(), + browser->styleSheet(), + browser->mimeSourceFactory(), + view.height() ); + richText.setWidth( &p, view.width() ); + int page = 1; + do { + richText.draw( &p, margin, margin, view, colorGroup() ); + view.moveBy( 0, view.height() ); + p.translate( 0 , -view.height() ); + p.drawText( view.right() - p.fontMetrics().width( QString::number(page) ), + view.bottom() + p.fontMetrics().ascent() + 5, QString::number(page) ); + if ( view.top() - margin >= richText.height() ) + break; + printer.newPage(); + page++; + } while (TRUE); + } +#endif +} + +void HelpWindow::pathSelected( const QString &_path ) +{ + browser->setSource( _path ); + if ( mHistory.values().contains(_path) ) + mHistory[ hist->insertItem( _path ) ] = _path; +} + +void HelpWindow::readHistory() +{ + if ( QFile::exists( QDir::currentDirPath() + "/.history" ) ) { + QFile f( QDir::currentDirPath() + "/.history" ); + f.open( IO_ReadOnly ); + QDataStream s( &f ); + s >> history; + f.close(); + while ( history.count() > 20 ) + history.remove( history.begin() ); + } +} + +void HelpWindow::readBookmarks() +{ + if ( QFile::exists( QDir::currentDirPath() + "/.bookmarks" ) ) { + QFile f( QDir::currentDirPath() + "/.bookmarks" ); + f.open( IO_ReadOnly ); + QDataStream s( &f ); + s >> bookmarks; + f.close(); + } +} + +void HelpWindow::histChosen( int i ) +{ + if ( mHistory.contains( i ) ) + browser->setSource( mHistory[ i ] ); +} + +void HelpWindow::bookmChosen( int i ) +{ + if ( mBookmarks.contains( i ) ) + browser->setSource( mBookmarks[ i ] ); +} + +void HelpWindow::addBookmark() +{ + mBookmarks[ bookm->insertItem( caption() ) ] = browser->context(); +} diff --git a/examples/helpviewer/helpwindow.h b/examples/helpviewer/helpwindow.h new file mode 100644 index 0000000..6a8b0a9 --- /dev/null +++ b/examples/helpviewer/helpwindow.h @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#ifndef HELPWINDOW_H +#define HELPWINDOW_H + +#include <qmainwindow.h> +#include <qtextbrowser.h> +#include <qstringlist.h> +#include <qmap.h> +#include <qdir.h> + +class QComboBox; +class QPopupMenu; + +class HelpWindow : public QMainWindow +{ + Q_OBJECT +public: + HelpWindow( const QString& home_, const QString& path, QWidget* parent = 0, const char *name=0 ); + ~HelpWindow(); + +private slots: + void setBackwardAvailable( bool ); + void setForwardAvailable( bool ); + + void sourceChanged( const QString& ); + void about(); + void aboutQt(); + void openFile(); + void newWindow(); + void print(); + + void pathSelected( const QString & ); + void histChosen( int ); + void bookmChosen( int ); + void addBookmark(); + +private: + void readHistory(); + void readBookmarks(); + + QTextBrowser* browser; + QComboBox *pathCombo; + int backwardId, forwardId; + QStringList history, bookmarks; + QMap<int, QString> mHistory, mBookmarks; + QPopupMenu *hist, *bookm; + +}; + + + + + +#endif + diff --git a/examples/helpviewer/home.xpm b/examples/helpviewer/home.xpm new file mode 100644 index 0000000..9c1369d --- /dev/null +++ b/examples/helpviewer/home.xpm @@ -0,0 +1,27 @@ +/* XPM */ +/* Drawn by Mark Donohoe for the K Desktop Environment */ +/* See http://www.kde.org */ +static char*home[]={ +"16 16 4 1", +"# c #000000", +"a c #ffffff", +"b c #c0c0c0", +". c None", +"........... ....", +" ....##.......", +"..#...####......", +"..#..#aabb#.....", +"..#.#aaaabb#....", +"..##aaaaaabb#...", +"..#aaaaaaaabb#..", +".#aaaaaaaaabbb#.", +"###aaaaaaaabb###", +"..#aaaaaaaabb#..", +"..#aaa###aabb#..", +"..#aaa#.#aabb#..", +"..#aaa#.#aabb#..", +"..#aaa#.#aabb#..", +"..#aaa#.#aabb#..", +"..#####.######..", +"................"}; + diff --git a/examples/helpviewer/main.cpp b/examples/helpviewer/main.cpp new file mode 100644 index 0000000..4f656fc --- /dev/null +++ b/examples/helpviewer/main.cpp @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#include "helpwindow.h" +#include <qapplication.h> +#include <qdir.h> +#include <stdlib.h> + + +int main( int argc, char ** argv ) +{ + QApplication::setColorSpec( QApplication::ManyColor ); + QApplication a(argc, argv); + + QString home; + if (argc > 1) { + home = argv[1]; + } else { + // Use a hard coded path. It is only an example. + home = QDir( "../../doc/html/index.html" ).absPath(); + } + + HelpWindow *help = new HelpWindow(home, ".", 0, "help viewer"); + help->setCaption("Qt Example - Helpviewer"); + if ( QApplication::desktop()->width() > 400 + && QApplication::desktop()->height() > 500 ) + help->show(); + else + help->showMaximized(); + + QObject::connect( &a, SIGNAL(lastWindowClosed()), + &a, SLOT(quit()) ); + + return a.exec(); +} |