diff options
Diffstat (limited to 'tools/assistant/mainwindow.ui.h')
-rw-r--r-- | tools/assistant/mainwindow.ui.h | 698 |
1 files changed, 698 insertions, 0 deletions
diff --git a/tools/assistant/mainwindow.ui.h b/tools/assistant/mainwindow.ui.h new file mode 100644 index 000000000..639c00450 --- /dev/null +++ b/tools/assistant/mainwindow.ui.h @@ -0,0 +1,698 @@ +/********************************************************************** +** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the TQt Assistant. +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** Alternatively you may (at your option) use any later version +** of the GNU General Public License if such license has been +** publicly approved by Trolltech ASA (or its successors, if any) +** and the KDE Free TQt Foundation. +** +** Please review the following information to ensure GNU General +** Public Licensing retquirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sales@trolltech.com. +** +** Licensees holding valid TQt Commercial licenses may use this file in +** accordance with the TQt Commercial License Agreement provided with +** the Software. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +#include "config.h" + +#include <qtabwidget.h> +#include <qfileinfo.h> +#include <qaccel.h> +#include <qobjectlist.h> +#include <qtimer.h> +#include <qdragobject.h> +#include <qfontinfo.h> +#include <qaccel.h> +#include <qmetaobject.h> +#include <qeventloop.h> + +TQPtrList<MainWindow> *MainWindow::windows = 0; + +#if defined(Q_WS_WIN) +extern Q_EXPORT int qt_ntfs_permission_lookup; +#endif + +void MainWindow::init() +{ +#if defined(Q_WS_WIN) + // Workaround for TQMimeSourceFactory failing in TQFileInfo::isReadable() for + // certain user configs. See task: 34372 + qt_ntfs_permission_lookup = 0; +#endif + setupCompleted = FALSE; + + goActions = new TQPtrList<TQAction>; + goActionDocFiles = new TQMap<TQAction*,TQString>; + goActions->setAutoDelete( TRUE ); + + if ( !windows ) + windows = new TQPtrList<MainWindow>; + windows->append( this ); + tabs = new TabbedBrowser( this, "qt_assistant_tabbedbrowser" ); + setCentralWidget( tabs ); + settingsDia = 0; + + Config *config = Config::configuration(); + + updateProfileSettings(); + + dw = new TQDockWindow( TQDockWindow::InDock, this ); + helpDock = new HelpDialog( dw, this ); + dw->setResizeEnabled( TRUE ); + dw->setCloseMode( TQDockWindow::Always ); + addDockWindow( dw, DockLeft ); + dw->setWidget( helpDock ); + dw->setCaption( "Sidebar" ); + dw->setFixedExtentWidth( 320 ); + + // read geometry configuration + setupGoActions(); + + if ( !config->isMaximized() ) { + TQRect geom = config->geometry(); + if( geom.isValid() ) { + resize(geom.size()); + move(geom.topLeft()); + } + } + + TQString mainWindowLayout = config->mainWindowLayout(); + + TQTextStream ts( &mainWindowLayout, IO_ReadOnly ); + ts >> *this; + + if ( config->sideBarHidden() ) + dw->hide(); + + tabs->setup(); + TQTimer::singleShot( 0, this, SLOT( setup() ) ); +#if defined(Q_OS_MACX) + // Use the same forward and backward browser shortcuts as Safari and Internet Explorer do + // on the Mac. This means that if you have access to one of those cool Intellimice, the thing + // works just fine, since that's how Microsoft hacked it. + actionGoPrevious->setAccel(TQKeySequence(TQt::CTRL|TQt::Key_Left)); + actionGoNext->setAccel(TQKeySequence(TQt::CTRL|TQt::Key_Right)); +#endif +} + +void MainWindow::setup() +{ + if( setupCompleted ) + return; + + qApp->setOverrideCursor( TQCursor( TQt::WaitCursor ) ); + statusBar()->message( tr( "Initializing TQt Assistant..." ) ); + setupCompleted = TRUE; + helpDock->initialize(); + connect( actionGoPrevious, SIGNAL( activated() ), tabs, SLOT( backward() ) ); + connect( actionGoNext, SIGNAL( activated() ), tabs, SLOT( forward() ) ); + connect( actionEditCopy, SIGNAL( activated() ), tabs, SLOT( copy() ) ); + connect( actionFileExit, SIGNAL( activated() ), qApp, SLOT( closeAllWindows() ) ); + connect( actionAddBookmark, SIGNAL( activated() ), + helpDock, SLOT( addBookmark() ) ); + connect( helpDock, SIGNAL( showLink( const TQString& ) ), + this, SLOT( showLink( const TQString& ) ) ); + connect( helpDock, SIGNAL( showSearchLink( const TQString&, const TQStringList& ) ), + this, SLOT( showSearchLink( const TQString&, const TQStringList&) ) ); + + connect( bookmarkMenu, SIGNAL( activated( int ) ), + this, SLOT( showBookmark( int ) ) ); + connect( actionZoomIn, SIGNAL( activated() ), tabs, SLOT( zoomIn() ) ); + connect( actionZoomOut, SIGNAL( activated() ), tabs, SLOT( zoomOut() ) ); + + connect( actionOpenPage, SIGNAL( activated() ), tabs, SLOT( newTab() ) ); + connect( actionClosePage, SIGNAL( activated() ), tabs, SLOT( closeTab() ) ); + connect( actionNextPage, SIGNAL( activated() ), tabs, SLOT( nextTab() ) ); + connect( actionPrevPage, SIGNAL( activated() ), tabs, SLOT( previousTab() ) ); + + + +#if defined(Q_OS_WIN32) || defined(Q_OS_WIN64) + TQAccel *acc = new TQAccel( this ); +// acc->connectItem( acc->insertItem( Key_F5 ), browser, SLOT( reload() ) ); + acc->connectItem( acc->insertItem( TQKeySequence("SHIFT+CTRL+=") ), actionZoomIn, SIGNAL(activated()) ); +#endif + + TQAccel *a = new TQAccel( this, dw ); + a->connectItem( a->insertItem( TQAccel::stringToKey( tr("Ctrl+T") ) ), + helpDock, SLOT( toggleContents() ) ); + a->connectItem( a->insertItem( TQAccel::stringToKey( tr("Ctrl+I") ) ), + helpDock, SLOT( toggleIndex() ) ); + a->connectItem( a->insertItem( TQAccel::stringToKey( tr("Ctrl+B") ) ), + helpDock, SLOT( toggleBookmarks() ) ); + a->connectItem( a->insertItem( TQAccel::stringToKey( tr("Ctrl+S") ) ), + helpDock, SLOT( toggleSearch() ) ); + + Config *config = Config::configuration(); + + setupBookmarkMenu(); + PopupMenu->insertItem( tr( "Vie&ws" ), createDockWindowMenu() ); + helpDock->tabWidget->setCurrentPage( config->sideBarPage() ); + + qApp->restoreOverrideCursor(); + actionGoPrevious->setEnabled( FALSE ); + actionGoNext->setEnabled( FALSE ); +} + +void MainWindow::setupGoActions() +{ + Config *config = Config::configuration(); + TQStringList titles = config->docTitles(); + TQAction *action = 0; + + static bool separatorInserted = FALSE; + + TQAction *cur = goActions->first(); + while( cur ) { + cur->removeFrom( goMenu ); + cur->removeFrom( goActionToolbar ); + cur = goActions->next(); + } + goActions->clear(); + goActionDocFiles->clear(); + + int addCount = 0; + + TQStringList::ConstIterator it = titles.begin(); + for ( ; it != titles.end(); ++it ) { + TQString title = *it; + TQPixmap pix = config->docIcon( title ); + if( !pix.isNull() ) { + if( !separatorInserted ) { + goMenu->insertSeparator(); + separatorInserted = TRUE; + } + action = new TQAction( title, TQIconSet( pix ), title, 0, 0 ); + action->addTo( goMenu ); + action->addTo( goActionToolbar ); + goActions->append( action ); + goActionDocFiles->insert( action, config->indexPage( title ) ); + connect( action, SIGNAL( activated() ), + this, SLOT( showGoActionLink() ) ); + ++addCount; + } + } + if( !addCount ) + goActionToolbar->hide(); + else + goActionToolbar->show(); + +} + +void MainWindow::browserTabChanged() +{ + if (tabs->currentBrowser()) { + actionGoPrevious->setEnabled(tabs->currentBrowser()->isBackwardAvailable()); + actionGoNext->setEnabled(tabs->currentBrowser()->isForwardAvailable()); + } +} + +bool MainWindow::insertActionSeparator() +{ + goMenu->insertSeparator(); + Toolbar->addSeparator(); + return TRUE; +} + +bool MainWindow::close( bool alsoDelete ) +{ + saveSettings(); + return TQMainWindow::close( alsoDelete ); +} + +void MainWindow::destroy() +{ + windows->removeRef( this ); + if ( windows->isEmpty() ) { + delete windows; + windows = 0; + } + delete goActions; + delete goActionDocFiles; +} + +void MainWindow::about() +{ + TQMessageBox box( this ); + box.setText( "<center><img src=\"splash.png\">" + "<p>Version " + TQString(QT_VERSION_STR) + "</p>" + "<p>Copyright (C) 2000-2008 Trolltech ASA. All rights reserved." + "</p></center><p></p>" + "<p>TQt Commercial Edition license holders: This program is" + " licensed to you under the terms of the TQt Commercial License" + " Agreement. For details, see the file LICENSE that came with" + " this software distribution.</p><p></p>" + "<p>TQt Open Source Edition users: This program is licensed to you" + " under the terms of the GNU General Public License Version 2." + " For details, see the file LICENSE.GPL that came with this" + " software distribution.</p><p>The program is provided AS IS" + " with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF" + " DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE." + "</p>" ); + box.setCaption( tr( "TQt Assistant" ) ); + box.setIcon( TQMessageBox::NoIcon ); + box.exec(); +} + +void MainWindow::aboutApplication() +{ + TQString url = Config::configuration()->aboutURL(); + if ( url == "about_qt" ) { + TQMessageBox::aboutTQt( this, "TQt Assistant" ); + return; + } + TQString text; + TQFile file( url ); + if( file.exists() && file.open( IO_ReadOnly ) ) + text = TQString( file.readAll() ); + if( text.isNull() ) + text = tr( "Failed to open about application contents in file: '%1'" ).arg( url ); + + TQMessageBox box( this ); + box.setText( text ); + box.setCaption( Config::configuration()->aboutApplicationMenuText() ); + box.setIcon( TQMessageBox::NoIcon ); + box.exec(); +} + +void MainWindow::find() +{ + if ( !findDialog ) + findDialog = new FindDialog( this ); + findDialog->comboFind->setFocus(); + findDialog->comboFind->lineEdit()->setSelection( + 0, findDialog->comboFind->lineEdit()->text().length() ); + findDialog->show(); +} + +void MainWindow::findAgain() +{ + if (!findDialog || !findDialog->hasFindExpression()) { + find(); + return; + } + findDialog->doFind(TRUE); +} + +void MainWindow::findAgainPrev() +{ + if (!findDialog || !findDialog->hasFindExpression()) { + find(); + return; + } + findDialog->doFind(FALSE); +} + +void MainWindow::goHome() +{ + showLink( Config::configuration()->homePage() ); +} + +void MainWindow::print() +{ + TQPrinter printer( TQPrinter::HighResolution ); + printer.setFullPage( TRUE ); + if ( printer.setup( this ) ) { + TQPainter p; + if ( !p.begin( &printer ) ) + return; + + qApp->setOverrideCursor( TQCursor( TQt::WaitCursor ) ); + qApp->eventLoop()->processEvents( TQEventLoop::ExcludeUserInput ); + + TQPaintDeviceMetrics metrics(p.device()); + TQTextBrowser *browser = tabs->currentBrowser(); + int dpiy = metrics.logicalDpiY(); + int margin = (int) ( (2/2.54)*dpiy ); + TQRect view( margin, + margin, + metrics.width() - 2 * margin, + metrics.height() - 2 * margin ); + TQSimpleRichText richText( browser->text(), browser->TQWidget::font(), browser->context(), + browser->styleSheet(), browser->mimeSourceFactory(), + view.height(), TQt::black, FALSE ); + richText.setWidth( &p, view.width() ); + int page = 1; + do { + qApp->eventLoop()->processEvents( TQEventLoop::ExcludeUserInput ); + + richText.draw( &p, margin, margin, view, palette().active() ); + view.moveBy( 0, view.height() ); + p.translate( 0 , -view.height() ); + p.drawText( view.right() - p.fontMetrics().width( TQString::number(page) ), + view.bottom() + p.fontMetrics().ascent() + 5, TQString::number(page) ); + if ( view.top() - margin >= richText.height() ) + break; + printer.newPage(); + page++; + } while (TRUE); + + qApp->eventLoop()->processEvents( TQEventLoop::ExcludeUserInput ); + qApp->restoreOverrideCursor(); + } +} + +void MainWindow::updateBookmarkMenu() +{ + for ( MainWindow *mw = windows->first(); mw; mw = windows->next() ) + mw->setupBookmarkMenu(); +} + +void MainWindow::setupBookmarkMenu() +{ + bookmarkMenu->clear(); + bookmarks.clear(); + actionAddBookmark->addTo( bookmarkMenu ); + + TQFile f( TQDir::homeDirPath() + "/.assistant/bookmarks." + + Config::configuration()->profileName() ); + if ( !f.open( IO_ReadOnly ) ) + return; + TQTextStream ts( &f ); + bookmarkMenu->insertSeparator(); + while ( !ts.atEnd() ) { + TQString title = ts.readLine(); + TQString link = ts.readLine(); + bookmarks.insert( bookmarkMenu->insertItem( title ), link ); + } +} + +void MainWindow::showBookmark( int id ) +{ + if ( bookmarks.find( id ) != bookmarks.end() ) + showLink( *bookmarks.find( id ) ); +} + +void MainWindow::showLinkFromClient( const TQString &link ) +{ + setWindowState(windowState() & ~WindowMinimized); + raise(); + setActiveWindow(); + showLink( link ); +} + +void MainWindow::showLink( const TQString &link ) +{ + if( link.isEmpty() ) { + qWarning( "The link is empty!" ); + } + + int find = link.find( '#' ); + TQString name = find >= 0 ? link.left( find ) : link; + + TQString absLink = link; + TQFileInfo fi( name ); + if ( fi.isRelative() ) { + if ( find >= 0 ) + absLink = fi.absFilePath() + link.right( link.length() - find ); + else + absLink = fi.absFilePath(); + } + if( fi.exists() ) { + tabs->setSource( absLink ); + tabs->currentBrowser()->setFocus(); + } else { + // ### Default 404 site! + statusBar()->message( tr( "Failed to open link: '%1'" ).arg( link ), 5000 ); + tabs->currentBrowser()->setText( tr( "<div align=\"center\"><h1>The page could not be found!</h1><br>" + "<h3>'%1'</h3></div>").arg( link ) ); + tabs->updateTitle( tr( "Error..." ) ); + } +} + +void MainWindow::showLinks( const TQStringList &links ) +{ + if ( links.size() == 0 ) { + qWarning( "MainWindow::showLinks() - Empty link" ); + return; + } + + if ( links.size() == 1 ) { + showLink( links.first() ); + return; + } + + pendingLinks = links; + + TQStringList::ConstIterator it = pendingLinks.begin(); + // Initial showing, The tab is empty so update that without creating it first + if ( tabs->currentBrowser()->source().isEmpty() ) { + pendingBrowsers.append(tabs->currentBrowser()); + tabs->setTitle(tabs->currentBrowser(), pendingLinks.first()); + } + ++it; + + while( it != pendingLinks.end() ) { + pendingBrowsers.append( tabs->newBackgroundTab(*it) ); + ++it; + } + + startTimer(50); + return; +} + +void MainWindow::timerEvent(TQTimerEvent *e) +{ + TQString link = pendingLinks.first(); + HelpWindow *win = pendingBrowsers.first(); + pendingLinks.pop_front(); + pendingBrowsers.removeFirst(); + if (pendingLinks.size() == 0) + killTimer(e->timerId()); + win->setSource(link); +} + +void MainWindow::showTQtHelp() +{ + showLink( TQString( qInstallPathDocs() ) + "/html/index.html" ); +} + +void MainWindow::showSettingsDialog() +{ + showSettingsDialog( -1 ); +} + +void MainWindow::showWebBrowserSettings() +{ + showSettingsDialog( 1 ); +} + +void MainWindow::showSettingsDialog( int page ) +{ + if ( !settingsDia ){ + settingsDia = new SettingsDialog( this ); + } + TQFontDatabase fonts; + settingsDia->fontCombo->clear(); + settingsDia->fontCombo->insertStringList( fonts.families() ); + settingsDia->fontCombo->lineEdit()->setText( tabs->browserFont().family() ); + settingsDia->fixedfontCombo->clear(); + settingsDia->fixedfontCombo->insertStringList( fonts.families() ); + settingsDia->fixedfontCombo->lineEdit()->setText( tabs->styleSheet()->item( "pre" )->fontFamily() ); + settingsDia->linkUnderlineCB->setChecked( tabs->linkUnderline() ); + settingsDia->colorButton->setPaletteBackgroundColor( tabs->palette().color( TQPalette::Active, TQColorGroup::Link ) ); + if ( page != -1 ) + settingsDia->settingsTab->setCurrentPage( page ); + + int ret = settingsDia->exec(); + + if ( ret != TQDialog::Accepted ) + return; + + TQObjectList *lst = (TQObjectList*)Toolbar->children(); + TQObject *obj; + for ( obj = lst->last(); obj; obj = lst->prev() ) { + if ( obj->isA( "TQToolBarSeparator" ) ) { + delete obj; + obj = 0; + break; + } + } + + setupGoActions(); + + TQFont fnt( tabs->browserFont() ); + fnt.setFamily( settingsDia->fontCombo->currentText() ); + tabs->setBrowserFont( fnt ); + tabs->setLinkUnderline( settingsDia->linkUnderlineCB->isChecked() ); + + TQPalette pal = tabs->palette(); + TQColor lc = settingsDia->colorButton->paletteBackgroundColor(); + pal.setColor( TQPalette::Active, TQColorGroup::Link, lc ); + pal.setColor( TQPalette::Inactive, TQColorGroup::Link, lc ); + pal.setColor( TQPalette::Disabled, TQColorGroup::Link, lc ); + tabs->setPalette( pal ); + + TQString family = settingsDia->fixedfontCombo->currentText(); + + TQStyleSheet *sh = tabs->styleSheet(); + sh->item( "pre" )->setFontFamily( family ); + sh->item( "code" )->setFontFamily( family ); + sh->item( "tt" )->setFontFamily( family ); + tabs->currentBrowser()->setText( tabs->currentBrowser()->text() ); + showLink( tabs->currentBrowser()->source() ); +} + +void MainWindow::hide() +{ + saveToolbarSettings(); + TQMainWindow::hide(); +} + +MainWindow* MainWindow::newWindow() +{ + saveSettings(); + saveToolbarSettings(); + MainWindow *mw = new MainWindow; + mw->move( geometry().topLeft() ); + if ( isMaximized() ) + mw->showMaximized(); + else + mw->show(); + mw->goHome(); + return mw; +} + +void MainWindow::saveSettings() +{ + Config *config = Config::configuration(); + config->setFontFamily( tabs->browserFont().family() ); + config->setFontSize( tabs->currentBrowser()->font().pointSize() ); + config->setFontFixedFamily( tabs->styleSheet()->item( "pre" )->fontFamily() ); + config->setLinkUnderline( tabs->linkUnderline() ); + config->setLinkColor( tabs->palette().color( TQPalette::Active, TQColorGroup::Link ).name() ); + config->setSideBarPage( helpDock->tabWidget->currentPageIndex() ); + config->setGeometry( TQRect( x(), y(), width(), height() ) ); + config->setMaximized( isMaximized() ); + + // Create list of the tab urls + TQStringList lst; + TQPtrList<HelpWindow> browsers = tabs->browsers(); + HelpWindow *browser = browsers.first(); + while (browser) { + lst << browser->source(); + browser = browsers.next(); + } + config->setSource(lst); + config->save(); +} + +void MainWindow::saveToolbarSettings() +{ + TQString mainWindowLayout; + TQTextStream ts( &mainWindowLayout, IO_WriteOnly ); + ts << *this; + Config::configuration()->setMainWindowLayout( mainWindowLayout ); +} + +TabbedBrowser* MainWindow::browsers() +{ + return tabs; +} + +void MainWindow::showSearchLink( const TQString &link, const TQStringList &terms ) +{ + HelpWindow * hw = tabs->currentBrowser(); + hw->blockScrolling( TRUE ); + hw->setCursor( waitCursor ); + if ( hw->source() == link ) + hw->reload(); + else + showLink( link ); + hw->sync(); + hw->setCursor( arrowCursor ); + + hw->viewport()->setUpdatesEnabled( FALSE ); + int minPar = INT_MAX; + int minIndex = INT_MAX; + TQStringList::ConstIterator it = terms.begin(); + for ( ; it != terms.end(); ++it ) { + int para = 0; + int index = 0; + bool found = hw->find( *it, FALSE, TRUE, TRUE, ¶, &index ); + while ( found ) { + if ( para < minPar ) { + minPar = para; + minIndex = index; + } + hw->setColor( red ); + found = hw->find( *it, FALSE, TRUE, TRUE ); + } + } + hw->blockScrolling( FALSE ); + hw->viewport()->setUpdatesEnabled( TRUE ); + hw->setCursorPosition( minPar, minIndex ); + hw->updateContents(); +} + + +void MainWindow::showGoActionLink() +{ + const TQObject *origin = sender(); + if( !origin || + origin->metaObject()->className() != TQString( "TQAction" ) ) + return; + + TQAction *action = (TQAction*) origin; + TQString docfile = *( goActionDocFiles->find( action ) ); + showLink( docfile ); +} + +void MainWindow::showAssistantHelp() +{ + showLink( Config::configuration()->assistantDocPath() + "/assistant.html" ); +} + +HelpDialog* MainWindow::helpDialog() +{ + return helpDock; +} + +void MainWindow::backwardAvailable( bool enable ) +{ + actionGoPrevious->setEnabled( enable ); +} + +void MainWindow::forwardAvailable( bool enable ) +{ + actionGoNext->setEnabled( enable ); +} + +void MainWindow::updateProfileSettings() +{ + Config *config = Config::configuration(); +#ifndef Q_WS_MACX + setIcon( config->applicationIcon() ); +#endif + helpMenu->clear(); + actionHelpAssistant->addTo( helpMenu ); + helpMenu->insertSeparator(); + helpAbout_TQt_AssistantAction->addTo( helpMenu ); + if ( !config->aboutApplicationMenuText().isEmpty() ) + actionAboutApplication->addTo( helpMenu ); + helpMenu->insertSeparator(); + actionHelpWhatsThis->addTo( helpMenu ); + + actionAboutApplication->setMenuText( config->aboutApplicationMenuText() ); + + if( !config->title().isNull() ) + setCaption( config->title() ); +} |