demos/browser/browsermainwindow.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
    88     setupToolBar();
    88     setupToolBar();
    89 
    89 
    90     QWidget *centralWidget = new QWidget(this);
    90     QWidget *centralWidget = new QWidget(this);
    91     BookmarksModel *boomarksModel = BrowserApplication::bookmarksManager()->bookmarksModel();
    91     BookmarksModel *boomarksModel = BrowserApplication::bookmarksManager()->bookmarksModel();
    92     m_bookmarksToolbar = new BookmarksToolBar(boomarksModel, this);
    92     m_bookmarksToolbar = new BookmarksToolBar(boomarksModel, this);
    93     connect(m_bookmarksToolbar, SIGNAL(openUrl(const QUrl&)),
    93     connect(m_bookmarksToolbar, SIGNAL(openUrl(QUrl)),
    94             m_tabWidget, SLOT(loadUrlInCurrentTab(const QUrl&)));
    94             m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
    95     connect(m_bookmarksToolbar->toggleViewAction(), SIGNAL(toggled(bool)),
    95     connect(m_bookmarksToolbar->toggleViewAction(), SIGNAL(toggled(bool)),
    96             this, SLOT(updateBookmarksToolbarActionText(bool)));
    96             this, SLOT(updateBookmarksToolbarActionText(bool)));
    97 
    97 
    98     QVBoxLayout *layout = new QVBoxLayout;
    98     QVBoxLayout *layout = new QVBoxLayout;
    99     layout->setSpacing(0);
    99     layout->setSpacing(0);
   107 #endif
   107 #endif
   108     layout->addWidget(m_tabWidget);
   108     layout->addWidget(m_tabWidget);
   109     centralWidget->setLayout(layout);
   109     centralWidget->setLayout(layout);
   110 	setCentralWidget(centralWidget);
   110 	setCentralWidget(centralWidget);
   111 
   111 
   112     connect(m_tabWidget, SIGNAL(loadPage(const QString &)),
   112     connect(m_tabWidget, SIGNAL(loadPage(QString)),
   113         this, SLOT(loadPage(const QString &)));
   113         this, SLOT(loadPage(QString)));
   114     connect(m_tabWidget, SIGNAL(setCurrentTitle(const QString &)),
   114     connect(m_tabWidget, SIGNAL(setCurrentTitle(QString)),
   115         this, SLOT(slotUpdateWindowTitle(const QString &)));
   115         this, SLOT(slotUpdateWindowTitle(QString)));
   116     connect(m_tabWidget, SIGNAL(showStatusBarMessage(const QString&)),
   116     connect(m_tabWidget, SIGNAL(showStatusBarMessage(QString)),
   117             statusBar(), SLOT(showMessage(const QString&)));
   117             statusBar(), SLOT(showMessage(QString)));
   118     connect(m_tabWidget, SIGNAL(linkHovered(const QString&)),
   118     connect(m_tabWidget, SIGNAL(linkHovered(QString)),
   119             statusBar(), SLOT(showMessage(const QString&)));
   119             statusBar(), SLOT(showMessage(QString)));
   120     connect(m_tabWidget, SIGNAL(loadProgress(int)),
   120     connect(m_tabWidget, SIGNAL(loadProgress(int)),
   121             this, SLOT(slotLoadProgress(int)));
   121             this, SLOT(slotLoadProgress(int)));
   122     connect(m_tabWidget, SIGNAL(tabsChanged()),
   122     connect(m_tabWidget, SIGNAL(tabsChanged()),
   123             m_autoSaver, SLOT(changeOccurred()));
   123             m_autoSaver, SLOT(changeOccurred()));
   124     connect(m_tabWidget, SIGNAL(geometryChangeRequested(const QRect &)),
   124     connect(m_tabWidget, SIGNAL(geometryChangeRequested(QRect)),
   125             this, SLOT(geometryChangeRequested(const QRect &)));
   125             this, SLOT(geometryChangeRequested(QRect)));
   126     connect(m_tabWidget, SIGNAL(printRequested(QWebFrame *)),
   126     connect(m_tabWidget, SIGNAL(printRequested(QWebFrame*)),
   127             this, SLOT(printRequested(QWebFrame *)));
   127             this, SLOT(printRequested(QWebFrame*)));
   128     connect(m_tabWidget, SIGNAL(menuBarVisibilityChangeRequested(bool)),
   128     connect(m_tabWidget, SIGNAL(menuBarVisibilityChangeRequested(bool)),
   129             menuBar(), SLOT(setVisible(bool)));
   129             menuBar(), SLOT(setVisible(bool)));
   130     connect(m_tabWidget, SIGNAL(statusBarVisibilityChangeRequested(bool)),
   130     connect(m_tabWidget, SIGNAL(statusBarVisibilityChangeRequested(bool)),
   131             statusBar(), SLOT(setVisible(bool)));
   131             statusBar(), SLOT(setVisible(bool)));
   132     connect(m_tabWidget, SIGNAL(toolBarVisibilityChangeRequested(bool)),
   132     connect(m_tabWidget, SIGNAL(toolBarVisibilityChangeRequested(bool)),
   367     QAction *a = viewMenu->addAction(tr("&Full Screen"), this, SLOT(slotViewFullScreen(bool)),  Qt::Key_F11);
   367     QAction *a = viewMenu->addAction(tr("&Full Screen"), this, SLOT(slotViewFullScreen(bool)),  Qt::Key_F11);
   368     a->setCheckable(true);
   368     a->setCheckable(true);
   369 
   369 
   370     // History
   370     // History
   371     HistoryMenu *historyMenu = new HistoryMenu(this);
   371     HistoryMenu *historyMenu = new HistoryMenu(this);
   372     connect(historyMenu, SIGNAL(openUrl(const QUrl&)),
   372     connect(historyMenu, SIGNAL(openUrl(QUrl)),
   373             m_tabWidget, SLOT(loadUrlInCurrentTab(const QUrl&)));
   373             m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
   374     connect(historyMenu, SIGNAL(hovered(const QString&)), this,
   374     connect(historyMenu, SIGNAL(hovered(QString)), this,
   375             SLOT(slotUpdateStatusbar(const QString&)));
   375             SLOT(slotUpdateStatusbar(QString)));
   376     historyMenu->setTitle(tr("Hi&story"));
   376     historyMenu->setTitle(tr("Hi&story"));
   377     menuBar()->addMenu(historyMenu);
   377     menuBar()->addMenu(historyMenu);
   378     QList<QAction*> historyActions;
   378     QList<QAction*> historyActions;
   379 
   379 
   380     m_historyBack = new QAction(tr("Back"), this);
   380     m_historyBack = new QAction(tr("Back"), this);
   402     historyActions.append(m_restoreLastSession);
   402     historyActions.append(m_restoreLastSession);
   403     historyMenu->setInitialActions(historyActions);
   403     historyMenu->setInitialActions(historyActions);
   404 
   404 
   405     // Bookmarks
   405     // Bookmarks
   406     BookmarksMenu *bookmarksMenu = new BookmarksMenu(this);
   406     BookmarksMenu *bookmarksMenu = new BookmarksMenu(this);
   407     connect(bookmarksMenu, SIGNAL(openUrl(const QUrl&)),
   407     connect(bookmarksMenu, SIGNAL(openUrl(QUrl)),
   408             m_tabWidget, SLOT(loadUrlInCurrentTab(const QUrl&)));
   408             m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
   409     connect(bookmarksMenu, SIGNAL(hovered(const QString&)),
   409     connect(bookmarksMenu, SIGNAL(hovered(QString)),
   410             this, SLOT(slotUpdateStatusbar(const QString&)));
   410             this, SLOT(slotUpdateStatusbar(QString)));
   411     bookmarksMenu->setTitle(tr("&Bookmarks"));
   411     bookmarksMenu->setTitle(tr("&Bookmarks"));
   412     menuBar()->addMenu(bookmarksMenu);
   412     menuBar()->addMenu(bookmarksMenu);
   413 
   413 
   414     QList<QAction*> bookmarksActions;
   414     QList<QAction*> bookmarksActions;
   415 
   415 
   453     m_historyBack->setIcon(style()->standardIcon(QStyle::SP_ArrowBack, 0, this));
   453     m_historyBack->setIcon(style()->standardIcon(QStyle::SP_ArrowBack, 0, this));
   454     m_historyBackMenu = new QMenu(this);
   454     m_historyBackMenu = new QMenu(this);
   455     m_historyBack->setMenu(m_historyBackMenu);
   455     m_historyBack->setMenu(m_historyBackMenu);
   456     connect(m_historyBackMenu, SIGNAL(aboutToShow()),
   456     connect(m_historyBackMenu, SIGNAL(aboutToShow()),
   457             this, SLOT(slotAboutToShowBackMenu()));
   457             this, SLOT(slotAboutToShowBackMenu()));
   458     connect(m_historyBackMenu, SIGNAL(triggered(QAction *)),
   458     connect(m_historyBackMenu, SIGNAL(triggered(QAction*)),
   459             this, SLOT(slotOpenActionUrl(QAction *)));
   459             this, SLOT(slotOpenActionUrl(QAction*)));
   460     m_navigationBar->addAction(m_historyBack);
   460     m_navigationBar->addAction(m_historyBack);
   461 
   461 
   462     m_historyForward->setIcon(style()->standardIcon(QStyle::SP_ArrowForward, 0, this));
   462     m_historyForward->setIcon(style()->standardIcon(QStyle::SP_ArrowForward, 0, this));
   463     m_historyForwardMenu = new QMenu(this);
   463     m_historyForwardMenu = new QMenu(this);
   464     connect(m_historyForwardMenu, SIGNAL(aboutToShow()),
   464     connect(m_historyForwardMenu, SIGNAL(aboutToShow()),
   465             this, SLOT(slotAboutToShowForwardMenu()));
   465             this, SLOT(slotAboutToShowForwardMenu()));
   466     connect(m_historyForwardMenu, SIGNAL(triggered(QAction *)),
   466     connect(m_historyForwardMenu, SIGNAL(triggered(QAction*)),
   467             this, SLOT(slotOpenActionUrl(QAction *)));
   467             this, SLOT(slotOpenActionUrl(QAction*)));
   468     m_historyForward->setMenu(m_historyForwardMenu);
   468     m_historyForward->setMenu(m_historyForwardMenu);
   469     m_navigationBar->addAction(m_historyForward);
   469     m_navigationBar->addAction(m_historyForward);
   470 
   470 
   471     m_stopReload = new QAction(this);
   471     m_stopReload = new QAction(this);
   472     m_reloadIcon = style()->standardIcon(QStyle::SP_BrowserReload);
   472     m_reloadIcon = style()->standardIcon(QStyle::SP_BrowserReload);
   476 
   476 
   477     m_navigationBar->addWidget(m_tabWidget->lineEditStack());
   477     m_navigationBar->addWidget(m_tabWidget->lineEditStack());
   478 
   478 
   479     m_toolbarSearch = new ToolbarSearch(m_navigationBar);
   479     m_toolbarSearch = new ToolbarSearch(m_navigationBar);
   480     m_navigationBar->addWidget(m_toolbarSearch);
   480     m_navigationBar->addWidget(m_toolbarSearch);
   481     connect(m_toolbarSearch, SIGNAL(search(const QUrl&)), SLOT(loadUrl(const QUrl&)));
   481     connect(m_toolbarSearch, SIGNAL(search(QUrl)), SLOT(loadUrl(QUrl)));
   482 
   482 
   483     m_chaseWidget = new ChaseWidget(this);
   483     m_chaseWidget = new ChaseWidget(this);
   484     m_navigationBar->addWidget(m_chaseWidget);
   484     m_navigationBar->addWidget(m_chaseWidget);
   485 }
   485 }
   486 
   486 
   487 void BrowserMainWindow::slotShowBookmarksDialog()
   487 void BrowserMainWindow::slotShowBookmarksDialog()
   488 {
   488 {
   489     BookmarksDialog *dialog = new BookmarksDialog(this);
   489     BookmarksDialog *dialog = new BookmarksDialog(this);
   490     connect(dialog, SIGNAL(openUrl(const QUrl&)),
   490     connect(dialog, SIGNAL(openUrl(QUrl)),
   491             m_tabWidget, SLOT(loadUrlInCurrentTab(const QUrl&)));
   491             m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
   492     dialog->show();
   492     dialog->show();
   493 }
   493 }
   494 
   494 
   495 void BrowserMainWindow::slotAddBookmark()
   495 void BrowserMainWindow::slotAddBookmark()
   496 {
   496 {
   548     } else {
   548     } else {
   549         updateStatusbarActionText(true);
   549         updateStatusbarActionText(true);
   550         statusBar()->show();
   550         statusBar()->show();
   551     }
   551     }
   552     m_autoSaver->changeOccurred();
   552     m_autoSaver->changeOccurred();
   553 }
       
   554 
       
   555 QUrl BrowserMainWindow::guessUrlFromString(const QString &string)
       
   556 {
       
   557     QString urlStr = string.trimmed();
       
   558     QRegExp test(QLatin1String("^[a-zA-Z]+\\:.*"));
       
   559 
       
   560     // Check if it looks like a qualified URL. Try parsing it and see.
       
   561     bool hasSchema = test.exactMatch(urlStr);
       
   562     if (hasSchema) {
       
   563         QUrl url = QUrl::fromEncoded(urlStr.toUtf8(), QUrl::TolerantMode);
       
   564         if (url.isValid())
       
   565             return url;
       
   566     }
       
   567 
       
   568     // Might be a file.
       
   569     if (QFile::exists(urlStr)) {
       
   570         QFileInfo info(urlStr);
       
   571         return QUrl::fromLocalFile(info.absoluteFilePath());
       
   572     }
       
   573 
       
   574     // Might be a shorturl - try to detect the schema.
       
   575     if (!hasSchema) {
       
   576         int dotIndex = urlStr.indexOf(QLatin1Char('.'));
       
   577         if (dotIndex != -1) {
       
   578             QString prefix = urlStr.left(dotIndex).toLower();
       
   579             QByteArray schema = (prefix == QLatin1String("ftp")) ? prefix.toLatin1() : QByteArray("http");
       
   580             QUrl url =
       
   581                 QUrl::fromEncoded(schema + "://" + urlStr.toUtf8(), QUrl::TolerantMode);
       
   582             if (url.isValid())
       
   583                 return url;
       
   584         }
       
   585     }
       
   586 
       
   587     // Fall back to QUrl's own tolerant parser.
       
   588     QUrl url = QUrl::fromEncoded(string.toUtf8(), QUrl::TolerantMode);
       
   589 
       
   590     // finally for cases where the user just types in a hostname add http
       
   591     if (url.scheme().isEmpty())
       
   592         url = QUrl::fromEncoded("http://" + string.toUtf8(), QUrl::TolerantMode);
       
   593     return url;
       
   594 }
   553 }
   595 
   554 
   596 void BrowserMainWindow::loadUrl(const QUrl &url)
   555 void BrowserMainWindow::loadUrl(const QUrl &url)
   597 {
   556 {
   598     if (!currentTab() || !url.isValid())
   557     if (!currentTab() || !url.isValid())
   675 {
   634 {
   676 #ifndef QT_NO_PRINTER
   635 #ifndef QT_NO_PRINTER
   677     if (!currentTab())
   636     if (!currentTab())
   678         return;
   637         return;
   679     QPrintPreviewDialog *dialog = new QPrintPreviewDialog(this);
   638     QPrintPreviewDialog *dialog = new QPrintPreviewDialog(this);
   680     connect(dialog, SIGNAL(paintRequested(QPrinter *)),
   639     connect(dialog, SIGNAL(paintRequested(QPrinter*)),
   681             currentTab(), SLOT(print(QPrinter *)));
   640             currentTab(), SLOT(print(QPrinter*)));
   682     dialog->exec();
   641     dialog->exec();
   683 #endif
   642 #endif
   684 }
   643 }
   685 
   644 
   686 void BrowserMainWindow::slotFilePrint()
   645 void BrowserMainWindow::slotFilePrint()
   871         currentTab()->setFocus();
   830         currentTab()->setFocus();
   872 }
   831 }
   873 
   832 
   874 void BrowserMainWindow::loadPage(const QString &page)
   833 void BrowserMainWindow::loadPage(const QString &page)
   875 {
   834 {
   876     QUrl url = guessUrlFromString(page);
   835     QUrl url = QUrl::fromUserInput(page);
   877     loadUrl(url);
   836     loadUrl(url);
   878 }
   837 }
   879 
   838 
   880 TabWidget *BrowserMainWindow::tabWidget() const
   839 TabWidget *BrowserMainWindow::tabWidget() const
   881 {
   840 {