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()) |