aboutsummaryrefslogtreecommitdiff
path: root/src/permissiondialog.cpp
blob: 2f181b660c329dfba0ad362996b6a0114454f0af (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "permissiondialog.h"
#include "ui_permissiondialog.h"

#include <QCheckBox>
#include <QMetaEnum>
#include <QWebEnginePage>

PermissionDialog::PermissionDialog(QWidget *parent)
    : QWidget(parent), ui(new Ui::PermissionDialog) {
  ui->setupUi(this);

  ui->featuresTableWidget->horizontalHeader()->setSectionResizeMode(
      QHeaderView::Stretch);
  ui->featuresTableWidget->verticalHeader()->setVisible(true);
  ui->featuresTableWidget->horizontalHeader()->setVisible(true);
  ui->featuresTableWidget->setSelectionMode(QAbstractItemView::NoSelection);
  ui->featuresTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
  ui->featuresTableWidget->setFocusPolicy(Qt::NoFocus);

  QMetaEnum en = QMetaEnum::fromType<QWebEnginePage::Feature>();
  for (int i = 0; i < en.keyCount(); i++) {
    QWebEnginePage::Feature feature = (QWebEnginePage::Feature)en.value(i);
    QString featureName = QVariant::fromValue(feature).toString();
    addToFeaturesTable(feature, featureName);
  }
}

void PermissionDialog::addToFeaturesTable(QWebEnginePage::Feature feature,
                                          QString &featureName) {
  if (featureName.isEmpty() == false) {
    int nextRow;
    int row = ui->featuresTableWidget->rowCount();
    if (row == 0) {
      nextRow = 0;
    } else {
      nextRow = row++;
    }

    QStringList columnData;
    columnData << featureName << "status";

    // insertRow
    ui->featuresTableWidget->insertRow(nextRow);
    settings.beginGroup("permissions");
    // add column
    for (int i = 0; i < columnData.count(); i++) {

      if (columnData.at(i) == "status") {
        QCheckBox *featureCheckBox = new QCheckBox(0);
        featureCheckBox->setStyleSheet(
            "border:0px;margin-left:50%; margin-right:50%;");
        featureCheckBox->setChecked(
            settings.value(featureName, false).toBool());
        connect(featureCheckBox, &QCheckBox::toggled, [=](bool checked) {
          // save permission
          settings.setValue("permissions/" + featureName, checked);
          emit webPageFeatureChanged(feature);
        });
        ui->featuresTableWidget->setCellWidget(nextRow, i, featureCheckBox);
      } else {
        QTableWidgetItem *item = new QTableWidgetItem();
        item->setText(columnData.at(i));
        item->setFlags(item->flags() & ~Qt::ItemIsSelectable);
        ui->featuresTableWidget->setItem(nextRow, i, item);
      }
      this->update();
    }
    settings.endGroup();
  }
}

PermissionDialog::~PermissionDialog() { delete ui; }