/* $Id: toolbars.cpp,v 1.1 1998/09/25 18:01:41 ramiro%netscape.com Exp $ * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Arnt * Gulbrandsen. Further developed by Warwick Allison, Kalle Dalheimer, * Eirik Eng, Matthias Ettrich, Arnt Gulbrandsen, Haavard Nord and * Paul Olav Tvete. Copyright (C) 1998 Warwick Allison, Kalle * Dalheimer, Eirik Eng, Matthias Ettrich, Arnt Gulbrandsen, Haavard * Nord and Paul Olav Tvete. All Rights Reserved. */ #include "toolbars.h" #include "QtContext.h" #include "QtBookmarkButton.h" #include "icons.h" #include #include #include #include #include #include #include #include #include #include #include RCSTAG("$Id: toolbars.cpp,v 1.1 1998/09/25 18:01:41 ramiro%netscape.com Exp $"); Toolbars::Toolbars( QtContext* context, QMainWindow * parent ) : QObject( parent, 0 ) { navigation = new QToolBar( "Navigation Toolbar", parent, QMainWindow::Top, TRUE ); location = new QToolBar( "Navigation Toolbar", parent, QMainWindow::Top, TRUE ); #if 0 personal = new QToolBar( "Navigation Toolbar", parent, QMainWindow::Top, TRUE ); #else personal = 0; #endif QToolTipGroup * ttg = parent->toolTipGroup(); QToolButton * b; back = new QToolButton( Icon( "TB_Back" ), "Back", 0, context, SLOT(cmdBack()), navigation, "back" ); back->setFocusPolicy( QWidget::NoFocus ); // do back menu here forward = new QToolButton( Icon( "TB_Forward" ), "Forward", 0, context, SLOT(cmdForward()), navigation, "forward" ); forward->setFocusPolicy( QWidget::NoFocus ); // do forward menu here b = new QToolButton( Icon( "TB_Reload" ), "Reload", 0, context, SLOT(cmdReload()), navigation, "reload" ); b->setFocusPolicy( QWidget::NoFocus ); b = new QToolButton( Icon( "TB_Home" ), "Home", 0, context, SLOT(cmdHome()), navigation, "home" ); b->setFocusPolicy( QWidget::NoFocus ); b = new QToolButton( Icon( "TB_Search" ), "Search", 0, context, SLOT(cmdSearch()), navigation, "search" ); // #### ? b->setFocusPolicy( QWidget::NoFocus ); b = new QToolButton( Icon( "TB_Places" ), "Places", 0, context, SLOT(cmdGuide()), navigation, "places" ); b->setFocusPolicy( QWidget::NoFocus ); #ifdef EDITOR b = new QToolButton( Icon( "TB_EditPage" ), "Edit Page", 0, context, SLOT(cmdEditPage()), navigation, "edit page" ); b->setFocusPolicy( QWidget::NoFocus ); #endif images = new QToolButton( Icon( "TB_LoadImages" ), "Show Images", 0, context, SLOT(cmdShowImages()), navigation, "show images" ); images->setFocusPolicy( QWidget::NoFocus ); b = new QToolButton( Icon( "TB_Print" ), "Print", 0, context, SLOT(cmdPrint()), navigation, "print" ); b->setFocusPolicy( QWidget::NoFocus ); b = new QToolButton( Icon( "TB_MixSecurity" ), "View Security", 0, context, SLOT(cmdViewSecurity()), navigation, "view security" ); b->setFocusPolicy( QWidget::NoFocus ); stop = new QToolButton( Icon( "TB_Stop" ), "Stop", 0, context, SLOT(cmdStopLoading()), navigation, "stop loading" ); stop->setFocusPolicy( QWidget::NoFocus ); // hole QWidget * hole = new QWidget( navigation, "stretchable hole" ); navigation->setStretchableWidget( hole ); animation = new MovieToolButton( navigation, Movie( "biganim" ), Pixmap( "notanim" ) ); animation->setFocusPolicy( QWidget::NoFocus ); QToolTip::add( animation, "Mozilla", ttg, "Visit Mozilla's home away from home" ); connect( animation, SIGNAL(clicked()), this, SLOT(visitMozilla()) ); // location bar b = new QtBookmarkButton( Pixmap("BM_FolderO"), "Bookmarks", context, location ); b->setFocusPolicy( QWidget::NoFocus ); QLabel * l = new QLabel( "Bookmarks", location ); l->setFixedSize( l->sizeHint() ); l->installEventFilter( b ); l = new QLabel( " ", location ); l->setFixedSize( l->sizeHint() ); l = new QLabel( "Location:", location ); l->setFixedSize( l->sizeHint() ); url = new QComboBox( TRUE, location ); url->setAutoCompletion( TRUE ); url->insertItem( "http://www.troll.no" ); url->setCurrentItem( 0 ); connect( url, SIGNAL(activated(const char *)), context, SLOT(browserGetURL(const char *)) ); url->setMaxCount( 100 ); url->setSizeLimit( 15 ); url->setInsertionPolicy( QComboBox::NoInsertion ); connect( this, SIGNAL(openURL(const char *)), context, SLOT(browserGetURL(const char *)) ); location->setStretchableWidget( url ); #if 0 // personal bar b = new QToolButton( personal ); b->setText( "Filler" ); b->setFocusPolicy( QWidget::NoFocus ); // hole hole = new QWidget( personal, "stretchable hole" ); personal->setStretchableWidget( hole ); #endif // now, confusingly, do the status bar too. it's strange, but... // security label status = parent->statusBar(); security = new QLabel( status, "security info" ); security->setPixmap( Pixmap( "Dash_Unsecure" ) ); security->setFixedWidth( security->sizeHint().width() ); status->addWidget( security, 0, FALSE ); // progress bar(s) progressBars = new QWidgetStack( status ); status->addWidget( progressBars, 10, FALSE ); knownProgress = new QProgressBar( progressBars, "known progress" ); knownProgress->setFrameStyle( QFrame::NoFrame ); unknownProgress = new UnknownProgress( progressBars, "unknown progress" ); // "Document: done" and other long-time messages messages = new QLabel( status, "long-time messages" ); status->addWidget( messages, 50, FALSE ); messages->setText( "Ready to surf the web" ); t = new QTimer( this ); connect( t, SIGNAL(timeout()), this, SLOT(hideProgressBars()) ); t2 = new QTimer( this ); connect( t2, SIGNAL(timeout()), animation, SLOT(start()) ); connect( ttg, SIGNAL(showTip(const char *)), status, SLOT(message(const char *)) ); connect( ttg, SIGNAL(removeTip()), status, SLOT(clear()) ); url->setFocus(); } Toolbars::~Toolbars() { // nothing } MovieToolButton::MovieToolButton( QToolBar * parent, const QMovie & movie, const Pixmap & pixmap ) : QToolButton( parent, 0 ) { m = new QMovie( movie ); m->pause(); m->connectResize(this, SLOT(movieResized(const QSize&))); m->connectUpdate(this, SLOT(movieUpdated(const QRect&))); pm = pixmap; } MovieToolButton::~MovieToolButton() { delete m; } void MovieToolButton::drawButtonLabel( QPainter * p ) { if ( m->running() ) { QPixmap fpm = m->framePixmap(); p->drawPixmap( width()/2-fpm.width()/2, height()/2-fpm.height()/2, fpm ); } else { p->fillRect( 1, 1, width()-2, height()-2, white ); p->drawPixmap( width()/2-pm.width()/2, height()/2-pm.height()/2, pm ); } } void MovieToolButton::movieUpdated(const QRect& r) { int x = width()/2-m->framePixmap().width()/2; int y = height()/2-m->framePixmap().height()/2; repaint( x, y, r.width(), r.height(), FALSE ); } void MovieToolButton::movieResized(const QSize&) { repaint( FALSE ); } void MovieToolButton::start() { m->unpause(); repaint( FALSE ); } void MovieToolButton::stop() { m->pause(); repaint( FALSE ); } QSize MovieToolButton::sizeHint() const { return QSize( 42,42 ); } void Toolbars::visitMozilla() { emit openURL( "http://www.troll.no/qtmozilla/" ); } void Toolbars::setBackButtonEnabled( bool e ) { back->setEnabled( e ); } void Toolbars::setForwardButtonEnabled( bool e ) { forward->setEnabled( e ); } void Toolbars::setStopButtonEnabled( bool e ) { stop->setEnabled( e ); } void Toolbars::setLoadImagesButtonEnabled( bool e ) { images->setEnabled( e ); } UnknownProgress::UnknownProgress( QWidget * parent, const char * name ) : QWidget( parent, name ) { x = 0; t = new QTimer( this ); connect( t, SIGNAL(timeout()), this, SLOT(progress()) ); } void UnknownProgress::progress() { if ( !t->isActive() ) t->start( 50, FALSE ); if ( !d ) d = 2; if ( d > 0 && x + 4*d > width() ) { int ox = x; x = width() - d; d = -d; repaint( ox, 0, width() - ox, height(), FALSE ); } else if ( d > 0 ) { x += d; repaint( x-d, 0, 4*d, height(), FALSE ); } else if ( d < 0 && x < -d ) { int ox = x - 3*x; d = -d; x = 0; repaint( 0, 0, QMAX(ox, 3*d), height(), FALSE ); } else if ( d < 0 ) { x += d; repaint( x, 0, 4*d, height(), FALSE ); } } void UnknownProgress::paintEvent( QPaintEvent * e ) { QPainter p( this ); p.eraseRect( e->rect() ); if ( d ) p.fillRect( x, 0, 3*d, height(), QBrush( colorGroup().foreground() ) ); } void UnknownProgress::done() { t->stop(); d = 0; repaint(); } void UnknownProgress::resizeEvent( QResizeEvent * e ) { if ( d < 0 ) d = -d; x = 0; QWidget::resizeEvent( e ); } void Toolbars::setupProgress( int ) { knownProgress->reset(); knownProgress->setTotalSteps( 100 ); unknownProgress->progress(); progressBars->raiseWidget( unknownProgress ); progressAsPercent = FALSE; t->stop(); t2->start( 20, TRUE ); } void Toolbars::signalProgress( int percent ) { if ( percent > 99 ) { endProgress(); return; } t->stop(); if ( !t2->isActive() ) t2->start( 20, TRUE ); if ( !progressAsPercent ) { if ( percent > 80 ) return; progressBars->raiseWidget( knownProgress ); progressAsPercent = TRUE; unknownProgress->done(); } knownProgress->setProgress( percent ); } void Toolbars::signalProgress() { t->stop(); if ( !t2->isActive() ) t2->start( 20, TRUE ); if ( !progressAsPercent ) unknownProgress->progress(); } void Toolbars::endProgress() { knownProgress->setProgress( 100 ); progressAsPercent = FALSE; t->start( 300, TRUE ); t2->stop(); } void Toolbars::setMessage( const char * m ) { messages->setText( m ); status->clear(); } void Toolbars::hideProgressBars() { animation->stop(); unknownProgress->done(); progressBars->raiseWidget( unknownProgress ); messages->setText( "" ); } void Toolbars::setComboText( const char * newURL ) { if ( !newURL ) return; char * u = qstrdup( newURL ); char * p = strchr( u, '#' ); if ( p ) *p = 0; int i = url->count(); while( --i > -1 ) { if ( !strcmp( u, url->text( i ) ) ) url->removeItem( i ); } url->insertItem( u, 0 ); url->setCurrentItem( 0 ); delete[] u; }