]> gitweb.stoutner.com Git - PrivacyBrowserPC.git/blobdiff - src/dialogs/DomainSettingsDialog.cpp
Rename Local Storage to DOM Storage. https://redmine.stoutner.com/issues/852
[PrivacyBrowserPC.git] / src / dialogs / DomainSettingsDialog.cpp
index e44af92563d63fb62b6605b5e7ef144a4acce462..eb43fb560ec7431b94dd1e1bbbf2721af5a604d0 100644 (file)
 #include <QMessageBox>
 #include <QPushButton>
 
-DomainSettingsDialog::DomainSettingsDialog(QWidget *parent) : QDialog(parent)
+// Define the public static int constants.
+const int DomainSettingsDialog::SHOW_ALL_DOMAINS = 0;
+const int DomainSettingsDialog::ADD_DOMAIN = 1;
+const int DomainSettingsDialog::EDIT_DOMAIN = 2;
+
+// Construct the class.
+DomainSettingsDialog::DomainSettingsDialog(const int &startType, const QString &domainName) : QDialog(nullptr)
 {
-    // Instantiate the domain settings view UI.
+    // Set the window title.
+    setWindowTitle(i18nc("The domain settings dialog window title", "Domain Settings"));
+
+    // Set the window modality.
+    setWindowModality(Qt::WindowModality::ApplicationModal);;
+
+    // Instantiate the domain settings dialog UI.
     Ui::DomainSettingsDialog domainSettingsDialogUi;
 
     // Setup the UI.
     domainSettingsDialogUi.setupUi(this);
 
-    // Get handles for the views.
+    // Get handles for the widgets.
     domainsListViewPointer = domainSettingsDialogUi.domainsListView;
     domainSettingsWidgetPointer = domainSettingsDialogUi.domainSettingsWidget;
     domainNameLineEditPointer = domainSettingsDialogUi.domainNameLineEdit;
     javaScriptComboBoxPointer = domainSettingsDialogUi.javaScriptComboBox;
     javaScriptLabelPointer = domainSettingsDialogUi.javaScriptLabel;
+    domStorageComboBoxPointer = domainSettingsDialogUi.domStorageComboBox;
+    domStorageLabelPointer = domainSettingsDialogUi.domStorageLabel;
     userAgentComboBoxPointer = domainSettingsDialogUi.userAgentComboBox;
     userAgentLabelPointer = domainSettingsDialogUi.userAgentLabel;
+    zoomFactorComboBoxPointer = domainSettingsDialogUi.zoomFactorComboBox;
+    customZoomFactorSpinBoxPointer = domainSettingsDialogUi.customZoomFactorSpinBox;
     QPushButton *addDomainButtonPointer = domainSettingsDialogUi.addDomainButton;
     deleteDomainButtonPointer = domainSettingsDialogUi.deleteDomainButton;
     QDialogButtonBox *dialogButtonBoxPointer = domainSettingsDialogUi.dialogButtonBox;
@@ -75,32 +91,99 @@ DomainSettingsDialog::DomainSettingsDialog(QWidget *parent) : QDialog(parent)
     // Read the data from the database and apply it to the table model.
     domainsTableModelPointer->select();
 
-    // Select the first entry in the list view.
-    domainsListViewPointer->setCurrentIndex(domainsTableModelPointer->index(0, domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::DOMAIN_NAME)));
+    // Setup the dialog according to the start type.
+    switch (startType)
+    {
+        case SHOW_ALL_DOMAINS:
+        {
+            // Select the first entry in the list view.
+            domainsListViewPointer->setCurrentIndex(domainsTableModelPointer->index(0, domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::DOMAIN_NAME)));
 
-    // Populate the domain settings.
-    domainSelected(domainsListViewPointer->selectionModel()->currentIndex());
+            // Populate the domain settings.
+            domainSelected(domainsListViewPointer->selectionModel()->currentIndex());
+
+            break;
+        }
+
+        case ADD_DOMAIN:
+        {
+            // Add the new domain.
+            addDomain(domainName);
+
+            break;
+        }
+
+        case EDIT_DOMAIN:
+        {
+            // Find the index for the new domain.  `1` returns the first match.
+            QModelIndexList newDomainIndex = domainsTableModelPointer->match(domainsTableModelPointer->index(0, domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::DOMAIN_NAME)),
+                                                                        Qt::DisplayRole, domainName, 1, Qt::MatchWrap);
+
+            // Move to the new domain.
+            domainsListViewPointer->setCurrentIndex(newDomainIndex[0]);
+
+            // Populate the domain settings.
+            domainSelected(domainsListViewPointer->selectionModel()->currentIndex());
+        }
+    }
 
     // Handle clicks on the domains.
     connect(domainsListViewPointer, SIGNAL(activated(QModelIndex)), this, SLOT(domainSelected(QModelIndex)));
 
-    // Connect the domain settings.
+    // Process changes to the domain settings.
     connect(domainNameLineEditPointer, SIGNAL(textEdited(QString)), this, SLOT(domainNameChanged(QString)));
     connect(javaScriptComboBoxPointer, SIGNAL(currentIndexChanged(int)), this, SLOT(javaScriptChanged(int)));
+    connect(domStorageComboBoxPointer, SIGNAL(currentIndexChanged(int)), this, SLOT(domStorageChanged(int)));
     connect(userAgentComboBoxPointer, SIGNAL(currentTextChanged(QString)), this, SLOT(userAgentChanged(QString)));
+    connect(zoomFactorComboBoxPointer, SIGNAL(currentIndexChanged(int)), this, SLOT(zoomFactorComboBoxChanged(int)));
+    connect(customZoomFactorSpinBoxPointer, SIGNAL(valueChanged(double)), this, SLOT(customZoomFactorChanged(double)));
 
     // Connect the buttons.
-    connect(addDomainButtonPointer, SIGNAL(released()), this, SLOT(showAddMessageBox()));
-    connect(deleteDomainButtonPointer, SIGNAL(released()), this, SLOT(showDeleteMessageBox()));
-    connect(resetButtonPointer, SIGNAL(released()), this, SLOT(reset()));
+    connect(addDomainButtonPointer, SIGNAL(clicked()), this, SLOT(showAddMessageBox()));
+    connect(deleteDomainButtonPointer, SIGNAL(clicked()), this, SLOT(showDeleteMessageBox()));
+    connect(resetButtonPointer, SIGNAL(clicked()), this, SLOT(reset()));
     connect(dialogButtonBoxPointer, SIGNAL(accepted()), this, SLOT(ok()));
-    connect(applyButtonPointer, SIGNAL(released()), this, SLOT(apply()));
+    connect(applyButtonPointer, SIGNAL(clicked()), this, SLOT(apply()));
     connect(dialogButtonBoxPointer, SIGNAL(rejected()), this, SLOT(cancel()));
 
     // Update the UI.
     updateUi();
 }
 
+void DomainSettingsDialog::addDomain(const QString &domainName) const
+{
+    // Create a new domain record.
+    QSqlRecord newDomainRecord = QSqlDatabase::database(DomainsDatabaseHelper::CONNECTION_NAME).record(DomainsDatabaseHelper::DOMAINS_TABLE);
+
+    // Set the values for the new domain.
+    newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::DOMAIN_NAME), domainName);
+    newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::JAVASCRIPT), DomainsDatabaseHelper::SYSTEM_DEFAULT);
+    newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::DOM_STORAGE), DomainsDatabaseHelper::SYSTEM_DEFAULT);
+    newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::USER_AGENT), UserAgentHelper::SYSTEM_DEFAULT_DATABASE);
+    newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::ZOOM_FACTOR), DomainsDatabaseHelper::SYSTEM_DEFAULT);
+    newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::CUSTOM_ZOOM_FACTOR), 1.0);
+
+    // Insert the new domain.  `-1` appends it to the end.
+    domainsTableModelPointer->insertRecord(-1, newDomainRecord);
+
+    // Submit all pending changes.
+    domainsTableModelPointer->submitAll();
+
+    // Find the index for the new domain.  `-1` allows for multiple entries to be returned.
+    QModelIndexList newDomainIndex = domainsTableModelPointer->match(domainsTableModelPointer->index(0, domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::DOMAIN_NAME)),
+                                                                        Qt::DisplayRole, domainName, -1, Qt::MatchWrap);
+
+    // Move to the new domain.  If there are multiple domains with the same name, the new one should be the last in the list.
+    domainsListViewPointer->setCurrentIndex(newDomainIndex[newDomainIndex.size() - 1]);
+
+    // Populate the domain settings.
+    domainSelected(domainsListViewPointer->selectionModel()->currentIndex());
+
+    // Update the UI.
+    updateUi();
+}
+
+
 void DomainSettingsDialog::apply() const
 {
     // Get the current index.
@@ -135,17 +218,26 @@ void DomainSettingsDialog::cancel()
     reject();
 }
 
-void DomainSettingsDialog::domainNameChanged(QString updatedDomainName) const
+void DomainSettingsDialog::customZoomFactorChanged(const double &newValue) const
 {
     // Update the domains table model.
-    domainsTableModelPointer->setData(domainsListViewPointer->selectionModel()->currentIndex(), updatedDomainName);
+    domainsTableModelPointer->setData(domainsListViewPointer->selectionModel()->currentIndex().siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::CUSTOM_ZOOM_FACTOR)),
+                                      newValue);
 
     // Update the UI.
     updateUi();
 }
 
+void DomainSettingsDialog::domainNameChanged(const QString &updatedDomainName) const
+{
+    // Update the domains table model.
+    domainsTableModelPointer->setData(domainsListViewPointer->selectionModel()->currentIndex(), updatedDomainName);
 
-void DomainSettingsDialog::domainSelected(QModelIndex modelIndex) const
+    // Update the UI.
+    updateUi();
+}
+
+void DomainSettingsDialog::domainSelected(const QModelIndex &modelIndex) const
 {
     // Populate the domain name line edit pointer.
     domainNameLineEditPointer->setText(modelIndex.data().toString());
@@ -153,6 +245,9 @@ void DomainSettingsDialog::domainSelected(QModelIndex modelIndex) const
     // Populate the JavaScript combo box.
     javaScriptComboBoxPointer->setCurrentIndex(modelIndex.siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::JAVASCRIPT)).data().toInt());
 
+    // Populate the DOM storage combo box.
+    domStorageComboBoxPointer->setCurrentIndex(modelIndex.siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::DOM_STORAGE)).data().toInt());
+
     // Get the user agent string.
     QString userAgent = modelIndex.siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::USER_AGENT)).data().toString();
 
@@ -165,15 +260,37 @@ void DomainSettingsDialog::domainSelected(QModelIndex modelIndex) const
     // Set the custom user agent if specified.
     if (userAgentIndex == -1) userAgentComboBoxPointer->setCurrentText(userAgent);
 
+    // Get the zoom factor combo box index.
+    int zoomFactorComboBoxIndex = modelIndex.siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::ZOOM_FACTOR)).data().toInt();
+
+    // Populate the zoom factor combo box.
+    zoomFactorComboBoxPointer->setCurrentIndex(zoomFactorComboBoxIndex);
+
+    // Populate the custom zoom factor spin box according to the zoom factor combo box.
+    if (zoomFactorComboBoxIndex == 0)  // System default zoom factor is selected.
+    {
+        // Display the default zoom factor.
+        customZoomFactorSpinBoxPointer->setValue(Settings::zoomFactor());
+    }
+    else  // Custom zoom factor is selected.
+    {
+        // Display the custom zoom factor from the domain settings.
+        customZoomFactorSpinBoxPointer->setValue(modelIndex.siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::CUSTOM_ZOOM_FACTOR)).data().toDouble());
+    }
+
+    // Set the initial status of the custom zoom factor spin box.
+    customZoomFactorSpinBoxPointer->setEnabled(zoomFactorComboBoxIndex);
+
     // Populate the labels.
     populateJavaScriptLabel();
+    populateDomStorageLabel();
     populateUserAgentLabel(userAgentComboBoxPointer->currentText());
 
     // Update the UI.
     updateUi();
 }
 
-void DomainSettingsDialog::javaScriptChanged(int newIndex) const
+void DomainSettingsDialog::javaScriptChanged(const int &newIndex) const
 {
     // Update the domains table model.
     domainsTableModelPointer->setData(domainsListViewPointer->selectionModel()->currentIndex().siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::JAVASCRIPT)),
@@ -186,6 +303,18 @@ void DomainSettingsDialog::javaScriptChanged(int newIndex) const
     updateUi();
 }
 
+void DomainSettingsDialog::domStorageChanged(const int &newIndex) const
+{
+    // Update the domains table model.
+    domainsTableModelPointer->setData(domainsListViewPointer->selectionModel()->currentIndex().siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::DOM_STORAGE)),
+                                      newIndex);
+
+    // Populate the DOM storage label.
+    populateDomStorageLabel();
+
+    // Update the UI.
+    updateUi();
+}
 
 void DomainSettingsDialog::ok()
 {
@@ -207,14 +336,10 @@ void DomainSettingsDialog::populateJavaScriptLabel() const
         case (DomainsDatabaseHelper::SYSTEM_DEFAULT):
         {
             // Set the text according to the system default.
-            if (Settings::javaScript())
-            {
-                javaScriptLabelPointer->setText(i18nc("Domains settings labels", "JavaScript enabled"));
-            }
+            if (Settings::javaScriptEnabled())
+                javaScriptLabelPointer->setText(i18nc("Domains settings label", "JavaScript enabled"));
             else
-            {
-                javaScriptLabelPointer->setText(i18nc("Domain settings labels", "JavaScript disabled"));
-            }
+                javaScriptLabelPointer->setText(i18nc("Domain settings label", "JavaScript disabled"));
 
             break;
         }
@@ -222,7 +347,7 @@ void DomainSettingsDialog::populateJavaScriptLabel() const
         case (DomainsDatabaseHelper::DISABLED):
         {
             // Set the label text in bold.
-            javaScriptLabelPointer->setText(i18nc("Domain settings labels.  The <strong> tags should be retained.", "<strong>JavaScript disabled</strong>"));
+            javaScriptLabelPointer->setText(i18nc("Domain settings label.  The <b> tags should be retained.", "<b>JavaScript disabled</b>"));
 
             break;
         }
@@ -230,7 +355,41 @@ void DomainSettingsDialog::populateJavaScriptLabel() const
         case (DomainsDatabaseHelper::ENABLED):
         {
             // Set the label text in bold.
-            javaScriptLabelPointer->setText(i18nc("Domains settings labels.  The <strong> tags should be retained.", "<strong>JavaScript enabled</strong>"));
+            javaScriptLabelPointer->setText(i18nc("Domains settings label.  The <b> tags should be retained.", "<b>JavaScript enabled</b>"));
+
+            break;
+        }
+    }
+}
+
+void DomainSettingsDialog::populateDomStorageLabel() const
+{
+    // Populate the label according to the currently selected index.
+    switch (domStorageComboBoxPointer->currentIndex())
+    {
+        case (DomainsDatabaseHelper::SYSTEM_DEFAULT):
+        {
+            // Set the text according to the system default.
+            if (Settings::domStorageEnabled())
+                domStorageLabelPointer->setText(i18nc("DOM storage label", "DOM storage enabled"));
+            else
+                domStorageLabelPointer->setText(i18nc("DOM storage label", "DOM storage disabled"));
+
+            break;
+        }
+
+        case (DomainsDatabaseHelper::DISABLED):
+        {
+            // Set the label text in bold.
+            domStorageLabelPointer->setText(i18nc("DOM storage label.  The <b> tags should be retained.", "<b>DOM storage disabled</b>"));
+
+            break;
+        }
+
+        case (DomainsDatabaseHelper::ENABLED):
+        {
+            // Set the label text in bold.
+            domStorageLabelPointer->setText(i18nc("DOM storage label.  The <b> tags should be retained.", "<b>DOM storage enabled</b>"));
 
             break;
         }
@@ -243,7 +402,7 @@ void DomainSettingsDialog::populateUserAgentLabel(const QString &userAgentName)
     if (userAgentName == UserAgentHelper::SYSTEM_DEFAULT_TRANSLATED)
     {
         // Display the system default user agent name.
-        userAgentLabelPointer->setText(UserAgentHelper::getTranslatedUserAgentName(Settings::userAgent()));
+        userAgentLabelPointer->setText(UserAgentHelper::getTranslatedUserAgentNameFromDatabaseName(Settings::userAgent()));
     }
     else
     {
@@ -277,39 +436,7 @@ void DomainSettingsDialog::showAddMessageBox()
                                                   QLineEdit::Normal, QString(), &okClicked);
 
     // Add the new domain if the user clicked OK.
-    if (okClicked)
-    {
-        // Create a new domain record.
-        QSqlRecord newDomainRecord = QSqlDatabase::database(DomainsDatabaseHelper::CONNECTION_NAME).record(DomainsDatabaseHelper::DOMAINS_TABLE);
-
-        // Add the new domain name.
-        newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::DOMAIN_NAME), newDomainName);
-
-        // Set the default value of `0` for JavaScript.
-        newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::JAVASCRIPT), 0);
-
-        // Set the default value for the user agent.
-        newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::USER_AGENT), UserAgentHelper::SYSTEM_DEFAULT_DATABASE);
-
-        // Insert the new domain.  `-1` appends it to the end.
-        domainsTableModelPointer->insertRecord(-1, newDomainRecord);
-
-        // Submit all pending changes.
-        domainsTableModelPointer->submitAll();
-
-        // Find the index for the new domain.  `-1` allows for multiple entries to be returned.
-        QModelIndexList newDomainIndex = domainsTableModelPointer->match(domainsTableModelPointer->index(0, domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::DOMAIN_NAME)),
-                                                                         Qt::DisplayRole, newDomainName, -1, Qt::MatchWrap);
-
-        // Move to the new domain.  If there are multiple domains with the same name, the new one should be the last in the list.
-        domainsListViewPointer->setCurrentIndex(newDomainIndex[newDomainIndex.size() - 1]);
-
-        // Populate the domain settings.
-        domainSelected(domainsListViewPointer->selectionModel()->currentIndex());
-
-        // Update the UI.
-        updateUi();
-    }
+    if (okClicked) addDomain(newDomainName);
 }
 
 void DomainSettingsDialog::showDeleteMessageBox() const
@@ -324,10 +451,10 @@ void DomainSettingsDialog::showDeleteMessageBox() const
     deleteDialogMessageBox.setWindowTitle(i18nc("Delete domain dialog title", "Delete Domain"));
 
     // Set the text.
-    deleteDialogMessageBox.setText(i18nc("Delete domain main message", "Delete the current domain?"));
+    deleteDialogMessageBox.setText(i18nc("Delete domain dialog main message", "Delete the current domain?"));
 
     // Set the informative text.
-    deleteDialogMessageBox.setInformativeText(i18nc("Delete domain secondary message", "Doing so will also save any pending changes that have been made to other domains."));
+    deleteDialogMessageBox.setInformativeText(i18nc("Delete domain dialog secondary message", "Doing so will also save any pending changes that have been made to other domains."));
 
     // Set the standard buttons.
     deleteDialogMessageBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
@@ -338,6 +465,7 @@ void DomainSettingsDialog::showDeleteMessageBox() const
     // Display the dialog and capture the return value.
     int returnValue = deleteDialogMessageBox.exec();
 
+    // Delete the domain if instructed.
     if (returnValue == QMessageBox::Yes)
     {
         // Get the current index.
@@ -388,11 +516,11 @@ void DomainSettingsDialog::updateUi() const
     domainSettingsWidgetPointer->setVisible(domainsTableModelPointer->rowCount() > 0);
 }
 
-void DomainSettingsDialog::userAgentChanged(const QString updatedUserAgent) const
+void DomainSettingsDialog::userAgentChanged(const QString &updatedUserAgent) const
 {
     // Update the domains table model.
     domainsTableModelPointer->setData(domainsListViewPointer->selectionModel()->currentIndex().siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::USER_AGENT)),
-                                      UserAgentHelper::getDatabaseUserAgentName(updatedUserAgent));
+                                      UserAgentHelper::getDatabaseUserAgentNameFromTranslatedName(updatedUserAgent));
 
     // Populate the user agent label.
     populateUserAgentLabel(updatedUserAgent);
@@ -401,4 +529,29 @@ void DomainSettingsDialog::userAgentChanged(const QString updatedUserAgent) cons
     updateUi();
 }
 
+void DomainSettingsDialog::zoomFactorComboBoxChanged(const int &newIndex) const
+{
+    // Get the current model index.
+    QModelIndex modelIndex = domainsListViewPointer->selectionModel()->currentIndex();
+
+    // Update the domains table model.
+    domainsTableModelPointer->setData(modelIndex.siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::ZOOM_FACTOR)), newIndex);
 
+    // Populate the custom zoom factor spin box according to the zoom factor combo box.
+    if (newIndex == 0)  // System default zoom factor is selected.
+    {
+        // Display the default zoom factor.
+        customZoomFactorSpinBoxPointer->setValue(Settings::zoomFactor());
+    }
+    else  // Custom zoom factor is selected.
+    {
+        // Display the custom zoom factor from the domain settings.
+        customZoomFactorSpinBoxPointer->setValue(modelIndex.siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::CUSTOM_ZOOM_FACTOR)).data().toDouble());
+    }
+
+    // Update the status of the custom zoom factor spin box.
+    customZoomFactorSpinBoxPointer->setEnabled(newIndex);
+
+    // Update the UI.
+    updateUi();
+}