You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
365 lines
11 KiB
365 lines
11 KiB
/***************************************************************************
|
|
* $Id$
|
|
**
|
|
* Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
|
|
**
|
|
* This file is part of an example program for Qt. This example
|
|
* program may be used, distributed and modified without limitation.
|
|
**
|
|
****************************************************************************/
|
|
import org.kde.qt.*;
|
|
import java.util.*;
|
|
|
|
|
|
class HelpWindow extends TQMainWindow
|
|
{
|
|
private TQTextBrowser browser;
|
|
private TQComboBox pathCombo;
|
|
private int backwardId, forwardId;
|
|
private String selectedURL;
|
|
private ArrayList history = new ArrayList();
|
|
private ArrayList bookmarks = new ArrayList();
|
|
private HashMap mHistory = new HashMap();
|
|
private HashMap mBookmarks = new HashMap();
|
|
private TQPopupMenu hist, bookm;
|
|
|
|
|
|
|
|
|
|
HelpWindow( String home_, String _path )
|
|
{
|
|
this(home_, _path, null, null);
|
|
}
|
|
|
|
HelpWindow( String home_, String _path,
|
|
TQWidget parent, String name )
|
|
{
|
|
super( parent, name, WDestructiveClose );
|
|
readHistory();
|
|
readBookmarks();
|
|
|
|
browser = new TQTextBrowser( this );
|
|
|
|
browser.mimeSourceFactory().setFilePath( new String[] { _path } );
|
|
browser.setFrameStyle( TQFrame.Panel | TQFrame.Sunken );
|
|
connect( browser, SIGNAL(" textChanged()"),
|
|
this, SLOT(" textChanged()") );
|
|
|
|
setCentralWidget( browser );
|
|
|
|
if ( !home_.equals("") )
|
|
browser.setSource( home_ );
|
|
|
|
connect( browser, SIGNAL(" highlighted( String)"),
|
|
statusBar(), SLOT(" message( String)") );
|
|
|
|
resize( 640,700 );
|
|
|
|
TQPopupMenu file = new TQPopupMenu( this );
|
|
file.insertItem( tr("&New Window"), this, SLOT(" newWindow()"), new TQKeySequence(CTRL+Key_N) );
|
|
file.insertItem( tr("&Open File"), this, SLOT(" openFile()"), new TQKeySequence(CTRL+Key_O) );
|
|
file.insertItem( tr("&Print"), this, SLOT(" print()"), new TQKeySequence(CTRL+Key_P) );
|
|
file.insertSeparator();
|
|
file.insertItem( tr("&Close"), this, SLOT(" close()"), new TQKeySequence(CTRL+Key_Q) );
|
|
file.insertItem( tr("E&xit"), tqApp(), SLOT(" closeAllWindows()"), new TQKeySequence(CTRL+Key_X) );
|
|
|
|
// The same three icons are used twice each.
|
|
TQIconSet icon_back = new TQIconSet( new TQPixmap("back.xpm") );
|
|
TQIconSet icon_forward = new TQIconSet( new TQPixmap("forward.xpm") );
|
|
TQIconSet icon_home = new TQIconSet( new TQPixmap("home.xpm") );
|
|
|
|
TQPopupMenu go = new TQPopupMenu( this );
|
|
backwardId = go.insertItem( icon_back,
|
|
tr("&Backward"), browser, SLOT(" backward()"),
|
|
new TQKeySequence(CTRL+Key_Left) );
|
|
forwardId = go.insertItem( icon_forward,
|
|
tr("&Forward"), browser, SLOT(" forward()"),
|
|
new TQKeySequence(CTRL+Key_Right) );
|
|
go.insertItem( icon_home, tr("&Home"), browser, SLOT(" home()") );
|
|
|
|
TQPopupMenu help = new TQPopupMenu( this );
|
|
help.insertItem( tr("&About ..."), this, SLOT(" about()") );
|
|
help.insertItem( tr("About &Qt ..."), this, SLOT(" aboutTQt()") );
|
|
|
|
hist = new TQPopupMenu( this );
|
|
Iterator it = history.iterator();
|
|
while (it.hasNext()) {
|
|
String item = (String) it.next();
|
|
mHistory.put(new Integer(hist.insertItem( item )), item);
|
|
}
|
|
connect( hist, SIGNAL(" activated( int )"),
|
|
this, SLOT(" histChosen( int )") );
|
|
|
|
bookm = new TQPopupMenu( this );
|
|
bookm.insertItem( tr( "Add Bookmark" ), this, SLOT(" addBookmark()") );
|
|
bookm.insertSeparator();
|
|
|
|
Iterator it2 = bookmarks.iterator();
|
|
while (it2.hasNext()) {
|
|
String item = (String) it2.next();
|
|
mBookmarks.put(new Integer(bookm.insertItem( item )), item);
|
|
}
|
|
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( boolean )"),
|
|
this, SLOT(" setBackwardAvailable( boolean )") );
|
|
connect( browser, SIGNAL(" forwardAvailable( boolean )"),
|
|
this, SLOT(" setForwardAvailable( boolean )") );
|
|
|
|
|
|
TQToolBar toolbar = new TQToolBar( this );
|
|
addToolBar( toolbar, "Toolbar");
|
|
TQToolButton button;
|
|
|
|
button = new TQToolButton( icon_back, tr("Backward"), "", browser, SLOT("backward()"), toolbar );
|
|
connect( browser, SIGNAL(" backwardAvailable(boolean)"), button, SLOT(" setEnabled(boolean)") );
|
|
button.setEnabled( false );
|
|
button = new TQToolButton( icon_forward, tr("Forward"), "", browser, SLOT("forward()"), toolbar );
|
|
connect( browser, SIGNAL(" forwardAvailable(boolean)"), button, SLOT(" setEnabled(boolean)") );
|
|
button.setEnabled( false );
|
|
button = new TQToolButton( icon_home, tr("Home"), "", browser, SLOT("home()"), toolbar );
|
|
|
|
toolbar.addSeparator();
|
|
|
|
pathCombo = new TQComboBox( true, toolbar );
|
|
connect( pathCombo, SIGNAL(" activated( String )"),
|
|
this, SLOT(" pathSelected( String )") );
|
|
toolbar.setStretchableWidget( pathCombo );
|
|
setRightJustification( true );
|
|
setDockEnabled( DockLeft, false );
|
|
setDockEnabled( DockRight, false );
|
|
|
|
pathCombo.insertItem( home_ );
|
|
browser.setFocus();
|
|
|
|
}
|
|
|
|
|
|
void setBackwardAvailable( boolean b)
|
|
{
|
|
menuBar().setItemEnabled( backwardId, b);
|
|
}
|
|
|
|
void setForwardAvailable( boolean b)
|
|
{
|
|
menuBar().setItemEnabled( forwardId, b);
|
|
}
|
|
|
|
|
|
void textChanged()
|
|
{
|
|
if ( browser.documentTitle() == null ) {
|
|
setCaption( "Qt Example - Helpviewer - " + browser.context() );
|
|
selectedURL = browser.context();
|
|
}
|
|
else {
|
|
setCaption( "Qt Example - Helpviewer - " + browser.documentTitle() ) ;
|
|
selectedURL = browser.documentTitle();
|
|
}
|
|
|
|
if ( !selectedURL.equals("") && pathCombo != null ) {
|
|
boolean exists = false;
|
|
int i;
|
|
for ( i = 0; i < pathCombo.count(); ++i ) {
|
|
if ( pathCombo.text( i ) == selectedURL ) {
|
|
exists = true;
|
|
break;
|
|
}
|
|
}
|
|
if ( !exists ) {
|
|
pathCombo.insertItem( selectedURL, 0 );
|
|
pathCombo.setCurrentItem( 0 );
|
|
mHistory.put( new Integer(hist.insertItem( selectedURL )), selectedURL);
|
|
} else
|
|
pathCombo.setCurrentItem( i );
|
|
selectedURL = null;
|
|
}
|
|
}
|
|
|
|
public void cleanUp()
|
|
{
|
|
history.clear();
|
|
Iterator it = mHistory.values().iterator();
|
|
while (it.hasNext())
|
|
history.add(it.next());
|
|
|
|
TQFile f = new TQFile( TQDir.currentDirPath() + "/.history" );
|
|
f.open( TQIODevice.IO_WriteOnly );
|
|
TQTextStream t = new TQTextStream( f );
|
|
Iterator it1 = history.iterator();
|
|
while (it1.hasNext()) {
|
|
String item = (String) it1.next();
|
|
t.writeRawBytes( item, item.length() );
|
|
t.writeRawBytes( "\n", 1 );
|
|
}
|
|
f.close();
|
|
|
|
bookmarks.clear();
|
|
Iterator it3 = mBookmarks.values().iterator();
|
|
while (it3.hasNext())
|
|
bookmarks.add(it3.next());
|
|
|
|
TQFile f2 = new TQFile( TQDir.currentDirPath() + "/.bookmarks" );
|
|
f2.open( TQIODevice.IO_WriteOnly );
|
|
TQTextStream t2 = new TQTextStream( f2 );
|
|
Iterator it2 = bookmarks.iterator();
|
|
while (it2.hasNext()) {
|
|
String item = (String) it2.next();
|
|
t2.writeRawBytes( item, item.length() );
|
|
t2.writeRawBytes( "\n", 1 );
|
|
}
|
|
f2.close();
|
|
}
|
|
|
|
|
|
void about()
|
|
{
|
|
TQMessageBox.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 100 lines of Java code, so don't expect too much :-)</p>"
|
|
);
|
|
}
|
|
|
|
|
|
void aboutTQt()
|
|
{
|
|
TQMessageBox.aboutTQt( this, "TQBrowser" );
|
|
}
|
|
|
|
void openFile()
|
|
{
|
|
String fn = TQFileDialog.getOpenFileName( "", "", this );
|
|
if ( !fn.equals("") )
|
|
browser.setSource( fn );
|
|
}
|
|
|
|
void newWindow()
|
|
{
|
|
( new HelpWindow(browser.source(), "qbrowser") ).show();
|
|
}
|
|
|
|
void print()
|
|
{
|
|
TQPrinter printer = new TQPrinter();//(TQPrinter.HighResolution );
|
|
printer.setFullPage(true);
|
|
if ( printer.setup( this ) ) {
|
|
TQPainter p = new TQPainter( printer );
|
|
TQPaintDeviceMetrics metrics = new TQPaintDeviceMetrics(p.device());
|
|
int dpix = metrics.logicalDpiX();
|
|
int dpiy = metrics.logicalDpiY();
|
|
int margin = 72; // pt
|
|
TQRect body = new TQRect(margin*dpix/72, margin*dpiy/72,
|
|
metrics.width()-margin*dpix/72*2,
|
|
metrics.height()-margin*dpiy/72*2 );
|
|
TQFont font = new TQFont("times", 10);
|
|
ArrayList filePaths = browser.mimeSourceFactory().filePath();
|
|
String file = "";
|
|
Iterator it = filePaths.iterator();
|
|
while (it.hasNext()) {
|
|
file = new TQUrl( new TQUrl((String) it.next()), new TQUrl( browser.source() ).path() ).path();
|
|
if ( TQFile.exists( file ) )
|
|
break;
|
|
else
|
|
file = "";
|
|
}
|
|
if ( file.equals("") )
|
|
return;
|
|
TQFile f = new TQFile( file );
|
|
if ( !f.open( TQIODevice.IO_ReadOnly ) )
|
|
return;
|
|
TQTextStream ts = new TQTextStream( f );
|
|
TQSimpleRichText richText = new TQSimpleRichText( ts.read(), font, browser.context(), browser.styleSheet(),
|
|
browser.mimeSourceFactory(), body.height() );
|
|
richText.setWidth( p, body.width() );
|
|
TQRect view = new TQRect( body.topLeft(), body.bottomRight() );
|
|
int page = 1;
|
|
do {
|
|
richText.draw( p, body.left(), body.top(), view, colorGroup() );
|
|
view.moveBy( 0, body.height() );
|
|
p.translate( 0 , -body.height() );
|
|
p.setFont( font );
|
|
p.drawText( view.right() - p.fontMetrics().width( new Integer(page).toString() ),
|
|
view.bottom() + p.fontMetrics().ascent() + 5, new Integer(page).toString() );
|
|
if ( view.top() >= richText.height() )
|
|
break;
|
|
printer.newPage();
|
|
page++;
|
|
} while (true);
|
|
}
|
|
}
|
|
|
|
void pathSelected( String _path )
|
|
{
|
|
browser.setSource( _path );
|
|
Iterator it = mHistory.values().iterator();
|
|
boolean exists = false;
|
|
while (it.hasNext()) {
|
|
if ( ((String) it.next()).equals(_path) ) {
|
|
exists = true;
|
|
break;
|
|
}
|
|
}
|
|
if ( !exists )
|
|
mHistory.put( new Integer(hist.insertItem( _path )), _path);
|
|
}
|
|
|
|
void readHistory()
|
|
{
|
|
if ( TQFile.exists( TQDir.currentDirPath() + "/.history" ) ) {
|
|
TQFile f = new TQFile( TQDir.currentDirPath() + "/.history" );
|
|
f.open( TQIODevice.IO_ReadOnly );
|
|
TQTextStream t = new TQTextStream( f );
|
|
while ( !t.atEnd() ) {
|
|
String item = t.readLine();
|
|
history.add((Object) item);
|
|
}
|
|
f.close();
|
|
while ( history.size() > 20 )
|
|
history.remove( 0 );
|
|
}
|
|
}
|
|
|
|
void readBookmarks()
|
|
{
|
|
if ( TQFile.exists( TQDir.currentDirPath() + "/.bookmarks" ) ) {
|
|
TQFile f = new TQFile( TQDir.currentDirPath() + "/.bookmarks" );
|
|
f.open( TQIODevice.IO_ReadOnly );
|
|
TQTextStream t = new TQTextStream( f );
|
|
|
|
while ( !t.atEnd() ) {
|
|
String item = t.readLine();
|
|
bookmarks.add((Object) item);
|
|
}
|
|
f.close();
|
|
}
|
|
}
|
|
|
|
void histChosen( int i )
|
|
{
|
|
if ( mHistory.containsKey( new Integer(i) ) )
|
|
browser.setSource( (String) mHistory.get( new Integer(i) ) );
|
|
}
|
|
|
|
void bookmChosen( int i )
|
|
{
|
|
if ( mBookmarks.containsKey( new Integer(i) ) )
|
|
browser.setSource( (String) mBookmarks.get( new Integer(i) ) );
|
|
}
|
|
|
|
void addBookmark()
|
|
{
|
|
mBookmarks.put( new Integer(bookm.insertItem( caption() )), browser.context() );
|
|
}
|
|
}
|