X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=blobdiff_plain;f=src%2Fwindows%2FBrowserWindow.cpp;fp=src%2Fwindows%2FBrowserWindow.cpp;h=716f2e0c58f57dea8d676a00c660ebf697ac58c1;hp=064c7eda22b7a70c4152306250e4fcd257f8bb30;hb=aa9a6b20db5e2c808b390b62704f28bd649e283c;hpb=150a354325500a3c3f8f8f7ee0e0ee30cd631205 diff --git a/src/windows/BrowserWindow.cpp b/src/windows/BrowserWindow.cpp index 064c7ed..716f2e0 100644 --- a/src/windows/BrowserWindow.cpp +++ b/src/windows/BrowserWindow.cpp @@ -29,6 +29,7 @@ // KDE Frameworks headers. #include +#include #include // Qt toolkit headers. @@ -38,6 +39,7 @@ #include #include #include +#include // Construct the class. BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() @@ -66,6 +68,9 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() QAction *forwardActionPointer = KStandardAction::forward(this, SLOT(forward()), actionCollectionPointer); KStandardAction::home(this, SLOT(home()), actionCollectionPointer); KStandardAction::preferences(this, SLOT(showSettingsDialog()), actionCollectionPointer); + KStandardAction::find(this, SLOT(focusFindLineEdit()), actionCollectionPointer); + QAction *findNextActionPointer = KStandardAction::findNext(this, SLOT(findNext()), actionCollectionPointer); + KStandardAction::findPrev(this, SLOT(findPrevious()), actionCollectionPointer); // Add the custom actions. userAgentPrivacyBrowserActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_privacy_browser")); @@ -90,6 +95,7 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() javaScriptActionPointer = actionCollectionPointer->addAction(QStringLiteral("javascript")); localStorageActionPointer = actionCollectionPointer->addAction(QStringLiteral("local_storage")); domStorageActionPointer = actionCollectionPointer->addAction(QStringLiteral("dom_storage")); + findCaseSensitiveActionPointer = actionCollectionPointer->addAction(QStringLiteral("find_case_sensitive")); // Create the action groups QActionGroup *userAgentActionGroupPointer = new QActionGroup(this); @@ -117,6 +123,7 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() javaScriptActionPointer->setCheckable(true); localStorageActionPointer->setCheckable(true); domStorageActionPointer->setCheckable(true); + findCaseSensitiveActionPointer->setCheckable(true); userAgentPrivacyBrowserActionPointer->setCheckable(true); userAgentWebEngineDefaultActionPointer->setCheckable(true); userAgentFirefoxLinuxActionPointer->setCheckable(true); @@ -154,6 +161,7 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() javaScriptActionPointer->setText(i18nc("JavaScript action", "JavaScript")); localStorageActionPointer->setText(i18nc("The Local Storage action", "Local Storage")); domStorageActionPointer->setText(i18nc("DOM Storage action", "DOM Storage")); + findCaseSensitiveActionPointer->setText(i18nc("Find Case Sensitive action", "Find Case Sensitive")); // Set the action icons. userAgentPrivacyBrowserActionPointer->setIcon(QIcon(":/icons/privacy-mode")); @@ -176,6 +184,7 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() domainSettingsActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("settings-configure"))); cookiesActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("preferences-web-browser-cookies"))); domStorageActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("code-class"))); + findCaseSensitiveActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("format-text-lowercase"))); // Update the on-the-fly menus. connect(tabWidgetPointer, SIGNAL(updateUserAgentActions(QString, bool)), this, SLOT(updateUserAgentActions(QString, bool))); @@ -206,8 +215,11 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() connect(tabWidgetPointer, SIGNAL(updateLocalStorageAction(bool)), this, SLOT(updateLocalStorageAction(bool))); connect(tabWidgetPointer, SIGNAL(updateDomStorageAction(bool)), this, SLOT(updateDomStorageAction(bool))); - // Setup the GUI based on the browser_ui.rc file. - setupGUI(StandardWindowOption::Default, ("browser_ui.rc")); + // Connect the find text actions. + connect(findCaseSensitiveActionPointer, SIGNAL(triggered()), this, SLOT(toggleFindCaseSensitive())); + + // Setup the GUI based on the browser_window_ui.rc file. + setupGUI(StandardWindowOption::Default, ("browser_window_ui.rc")); // Get lists of the actions' associated widgets. QList userAgentAssociatedWidgetsPointerList = userAgentPrivacyBrowserActionPointer->associatedWidgets(); @@ -229,8 +241,33 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() navigationToolBarPointer = toolBar(QStringLiteral("navigation_toolbar")); urlToolBarPointer = toolBar(QStringLiteral("url_toolbar")); - // Create a URL line edit. + // Create the line edits. urlLineEditPointer = new KLineEdit(); + findTextLineEditPointer = new KLineEdit(); + + // Get the line edit size policies. + QSizePolicy urlLineEditSizePolicy = urlLineEditPointer->sizePolicy(); + QSizePolicy findTextLineEditSizePolicy = findTextLineEditPointer->sizePolicy(); + + // Set the URL line edit horizontal stretch to be five times the find text line edit stretch. + urlLineEditSizePolicy.setHorizontalStretch(5); + findTextLineEditSizePolicy.setHorizontalStretch(1); + + // Set the policies. + urlLineEditPointer->setSizePolicy(urlLineEditSizePolicy); + findTextLineEditPointer->setSizePolicy(findTextLineEditSizePolicy); + + // Set the widths. + urlLineEditPointer->setMinimumWidth(350); + findTextLineEditPointer->setMinimumWidth(200); + findTextLineEditPointer->setMaximumWidth(350); + + // Set the placehold text. + urlLineEditPointer->setPlaceholderText(i18nc("The URL line edit placeholder text", "URL or Search Terms")); + findTextLineEditPointer->setPlaceholderText(i18nc("The find line edit placeholder text", "Find Text")); + + // Show the clear button on the find line edit. + findTextLineEditPointer->setClearButtonEnabled(true); // Add an edit or add domain settings action to the URL line edit. QAction *addOrEditDomainSettingsActionPointer = urlLineEditPointer->addAction(QIcon::fromTheme("settings-configure"), QLineEdit::TrailingPosition); @@ -238,12 +275,32 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // Add or edit the current domain settings. connect(addOrEditDomainSettingsActionPointer, SIGNAL(triggered()), this, SLOT(addOrEditDomainSettings())); - // Populate the URL toolbar. + // Create a find text label pointer. + findTextLabelPointer = new QLabel(); + + // Set the default label text. + findTextLabelPointer->setText(QStringLiteral(" ") + i18nc("Default find results.", "0/0") + QStringLiteral(" ")); + + // Insert the widgets into the toolbars. urlToolBarPointer->insertWidget(javaScriptActionPointer, urlLineEditPointer); + urlToolBarPointer->insertWidget(findNextActionPointer, findTextLineEditPointer); + urlToolBarPointer->insertWidget(findNextActionPointer, findTextLabelPointer); // Load a new URL from the URL line edit. connect(urlLineEditPointer, SIGNAL(returnKeyPressed(const QString)), this, SLOT(loadUrlFromLineEdit(const QString))); + // Find text as it is typed. + connect(findTextLineEditPointer, SIGNAL(textEdited(const QString &)), tabWidgetPointer, SLOT(findText(const QString &))); + + // Find next if the enter key is pressed. + connect(findTextLineEditPointer, SIGNAL(returnKeyPressed(const QString &)), tabWidgetPointer, SLOT(findText(const QString &))); + + // Update find text when switching tabs. + connect(tabWidgetPointer, SIGNAL(updateFindText(const QString &, const bool)), this, SLOT(updateFindText(const QString &, const bool))); + + // Update the find text results. + connect(tabWidgetPointer, SIGNAL(updateFindTextResults(const QWebEngineFindTextResult &)), this, SLOT(updateFindTextResults(const QWebEngineFindTextResult &))); + // Update the URL line edit on page loads. connect(tabWidgetPointer, SIGNAL(updateUrlLineEdit(QUrl)), this, SLOT(updateUrlLineEdit(QUrl))); @@ -270,11 +327,13 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() connect(tabWidgetPointer, SIGNAL(clearUrlLineEditFocus()), this, SLOT(clearUrlLineEditFocus())); // Get the URL line edit palettes. - noDomainSettingsPalette = urlLineEditPointer->palette(); - domainSettingsPalette = urlLineEditPointer->palette(); + normalBackgroundPalette = urlLineEditPointer->palette(); + negativeBackgroundPalette = normalBackgroundPalette; + positiveBackgroundPalette = normalBackgroundPalette; - // Modify the domain settings palette. - domainSettingsPalette.setColor(QPalette::Base, QColor("#C8E6C9")); + // Modify the palettes. + KColorScheme::adjustBackground(negativeBackgroundPalette, KColorScheme::NegativeBackground); + KColorScheme::adjustBackground(positiveBackgroundPalette, KColorScheme::PositiveBackground); // Update the applied palette. connect(tabWidgetPointer, SIGNAL(updateDomainSettingsIndicator(const bool)), this, SLOT(updateDomainSettingsIndicator(const bool))); @@ -350,9 +409,20 @@ void BrowserWindow::clearUrlLineEditFocus() const void BrowserWindow::escape() const { - // Exit full screen browsing if it is enabled. - if (fullScreenActionPointer->isChecked()) + // Process the excape according to the status of the browser. + if (fullScreenActionPointer->isChecked()) // Full screen browsing is enabled. + { + // Exit full screen browsing. fullScreenActionPointer->trigger(); + } + else if (!findTextLineEditPointer->text().isEmpty()) // Find text is activated. + { + // Clear the text in the line edit. + findTextLineEditPointer->clear(); + + // Clear the search in the WebEngine. + tabWidgetPointer->findText(QStringLiteral("")); + } } void BrowserWindow::fileNew() const @@ -361,6 +431,35 @@ void BrowserWindow::fileNew() const (new BrowserWindow)->show(); } +void BrowserWindow::findNext() const +{ + // Get the find string. + const QString findString = findTextLineEditPointer->text(); + + // Search for the text if it is not empty. + if (!findString.isEmpty()) + tabWidgetPointer->findText(findString); +} + +void BrowserWindow::findPrevious() const +{ + // Get the find string. + const QString findString = findTextLineEditPointer->text(); + + // Search for the text if it is not empty. + if (!findString.isEmpty()) + tabWidgetPointer->findPrevious(findString); +} + +void BrowserWindow::focusFindLineEdit() const +{ + // Set the focus on the find line edit. + findTextLineEditPointer->setFocus(); + + // Select all the text in the find line edit. + findTextLineEditPointer->selectAll(); +} + void BrowserWindow::forward() const { // Remove the focus from the URL line edit. @@ -591,6 +690,15 @@ void BrowserWindow::toggleDomStorage() const tabWidgetPointer->toggleDomStorage(); } +void BrowserWindow::toggleFindCaseSensitive() const +{ + // Get the current find string. + const QString findString = findTextLineEditPointer->text(); + + // Toggle find case sensitive. + tabWidgetPointer->toggleFindCaseSensitive(findString); +} + void BrowserWindow::toggleJavaScript() const { // Remove the focus from the URL line edit. @@ -672,9 +780,32 @@ void BrowserWindow::updateDomainSettingsIndicator(const bool status) { // Set the domain palette according to the status. if (status) - urlLineEditPointer->setPalette(domainSettingsPalette); + urlLineEditPointer->setPalette(positiveBackgroundPalette); + else + urlLineEditPointer->setPalette(normalBackgroundPalette); +} + +void BrowserWindow::updateFindText(const QString &text, const bool findCaseSensitive) const +{ + // Set the text. + findTextLineEditPointer->setText(text); + + // Set the find case sensitive action checked status. + findCaseSensitiveActionPointer->setChecked(findCaseSensitive); +} + +void BrowserWindow::updateFindTextResults(const QWebEngineFindTextResult &findTextResult) const +{ + // Update the find text label. + findTextLabelPointer->setText(QStringLiteral(" %1/%2 ").arg(findTextResult.activeMatch()).arg(findTextResult.numberOfMatches())); + + // Set the background color according to the find status. + if (findTextLineEditPointer->text().isEmpty()) + findTextLineEditPointer->setPalette(normalBackgroundPalette); + else if (findTextResult.numberOfMatches() == 0) + findTextLineEditPointer->setPalette(negativeBackgroundPalette); else - urlLineEditPointer->setPalette(noDomainSettingsPalette); + findTextLineEditPointer->setPalette(positiveBackgroundPalette); } void BrowserWindow::updateJavaScriptAction(const bool &isEnabled)