cpsecplugins/cpadvancedsecplugin/src/advsecsettingscerttrustsettingsview.cpp
author hgs
Thu, 14 Oct 2010 13:56:11 +0300
changeset 63 989397f9511c
permissions -rw-r--r--
201039_03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
63
989397f9511c 201039_03
hgs
parents:
diff changeset
     1
/*
989397f9511c 201039_03
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
989397f9511c 201039_03
hgs
parents:
diff changeset
     3
* All rights reserved.
989397f9511c 201039_03
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
989397f9511c 201039_03
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0""
989397f9511c 201039_03
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
989397f9511c 201039_03
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
989397f9511c 201039_03
hgs
parents:
diff changeset
     8
*
989397f9511c 201039_03
hgs
parents:
diff changeset
     9
* Initial Contributors:
989397f9511c 201039_03
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
989397f9511c 201039_03
hgs
parents:
diff changeset
    11
*
989397f9511c 201039_03
hgs
parents:
diff changeset
    12
* Contributors:
989397f9511c 201039_03
hgs
parents:
diff changeset
    13
*
989397f9511c 201039_03
hgs
parents:
diff changeset
    14
* Description:  Certificate trust settings view in advanced security settings
989397f9511c 201039_03
hgs
parents:
diff changeset
    15
*
989397f9511c 201039_03
hgs
parents:
diff changeset
    16
*/
989397f9511c 201039_03
hgs
parents:
diff changeset
    17
989397f9511c 201039_03
hgs
parents:
diff changeset
    18
#include "advsecsettingscerttrustsettingsview.h"
989397f9511c 201039_03
hgs
parents:
diff changeset
    19
#include "advsecsettingstrustedcertusageuids.h"
989397f9511c 201039_03
hgs
parents:
diff changeset
    20
#include "advsecsettingscertificatemodel.h"
989397f9511c 201039_03
hgs
parents:
diff changeset
    21
#include "advsecsettingscertificate.h"
989397f9511c 201039_03
hgs
parents:
diff changeset
    22
#include <QGraphicsLinearLayout>
989397f9511c 201039_03
hgs
parents:
diff changeset
    23
#include <HbGroupBox>
989397f9511c 201039_03
hgs
parents:
diff changeset
    24
#include <HbDataForm>
989397f9511c 201039_03
hgs
parents:
diff changeset
    25
#include <HbDataFormModel>
989397f9511c 201039_03
hgs
parents:
diff changeset
    26
#include <HbMenu>
989397f9511c 201039_03
hgs
parents:
diff changeset
    27
#include <HbAction>
989397f9511c 201039_03
hgs
parents:
diff changeset
    28
989397f9511c 201039_03
hgs
parents:
diff changeset
    29
const QString KText("text");
989397f9511c 201039_03
hgs
parents:
diff changeset
    30
const QString KAdditionalText("additionalText");
989397f9511c 201039_03
hgs
parents:
diff changeset
    31
const QString KHexUsageIdFormat("0x%1");
989397f9511c 201039_03
hgs
parents:
diff changeset
    32
const int KHexFieldWidth = 8;
989397f9511c 201039_03
hgs
parents:
diff changeset
    33
const int KHexBase = 16;
989397f9511c 201039_03
hgs
parents:
diff changeset
    34
989397f9511c 201039_03
hgs
parents:
diff changeset
    35
989397f9511c 201039_03
hgs
parents:
diff changeset
    36
// ======== MEMBER FUNCTIONS ========
989397f9511c 201039_03
hgs
parents:
diff changeset
    37
989397f9511c 201039_03
hgs
parents:
diff changeset
    38
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    39
// AdvSecSettingsCertTrustSettingsView::AdvSecSettingsCertTrustSettingsView()
989397f9511c 201039_03
hgs
parents:
diff changeset
    40
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    41
//
989397f9511c 201039_03
hgs
parents:
diff changeset
    42
AdvSecSettingsCertTrustSettingsView::AdvSecSettingsCertTrustSettingsView(
989397f9511c 201039_03
hgs
parents:
diff changeset
    43
    AdvSecSettingsCertificateModel &model, QGraphicsItem *parent) :
989397f9511c 201039_03
hgs
parents:
diff changeset
    44
    AdvSecSettingsViewBase(0, parent), mModel(model), mCertificate(0),
989397f9511c 201039_03
hgs
parents:
diff changeset
    45
    mIsCertDeletable(false), mViewLabel(0), mDataForm(0), mDataFormModel(0)
989397f9511c 201039_03
hgs
parents:
diff changeset
    46
{
989397f9511c 201039_03
hgs
parents:
diff changeset
    47
    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
989397f9511c 201039_03
hgs
parents:
diff changeset
    48
989397f9511c 201039_03
hgs
parents:
diff changeset
    49
    mViewLabel = new HbGroupBox;
989397f9511c 201039_03
hgs
parents:
diff changeset
    50
    layout->addItem(mViewLabel);
989397f9511c 201039_03
hgs
parents:
diff changeset
    51
989397f9511c 201039_03
hgs
parents:
diff changeset
    52
    HbScrollArea *scrollArea = new HbScrollArea;
989397f9511c 201039_03
hgs
parents:
diff changeset
    53
    mDataForm = new HbDataForm;
989397f9511c 201039_03
hgs
parents:
diff changeset
    54
    scrollArea->setContentWidget(mDataForm);
989397f9511c 201039_03
hgs
parents:
diff changeset
    55
    layout->addItem(scrollArea);
989397f9511c 201039_03
hgs
parents:
diff changeset
    56
989397f9511c 201039_03
hgs
parents:
diff changeset
    57
    setLayout(layout);
989397f9511c 201039_03
hgs
parents:
diff changeset
    58
989397f9511c 201039_03
hgs
parents:
diff changeset
    59
    connect(&mModel, SIGNAL(getTrustSettingsCompleted()), this, SLOT(refreshDisplay()));
989397f9511c 201039_03
hgs
parents:
diff changeset
    60
    connect(&mModel, SIGNAL(deleteCertificateCompleted()), this, SLOT(close()));
989397f9511c 201039_03
hgs
parents:
diff changeset
    61
    connect(this, SIGNAL(aboutToClose()), this, SLOT(saveTrustSettings()));
989397f9511c 201039_03
hgs
parents:
diff changeset
    62
}
989397f9511c 201039_03
hgs
parents:
diff changeset
    63
989397f9511c 201039_03
hgs
parents:
diff changeset
    64
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    65
// AdvSecSettingsCertTrustSettingsView::~AdvSecSettingsCertTrustSettingsView()
989397f9511c 201039_03
hgs
parents:
diff changeset
    66
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    67
//
989397f9511c 201039_03
hgs
parents:
diff changeset
    68
AdvSecSettingsCertTrustSettingsView::~AdvSecSettingsCertTrustSettingsView()
989397f9511c 201039_03
hgs
parents:
diff changeset
    69
{
989397f9511c 201039_03
hgs
parents:
diff changeset
    70
}
989397f9511c 201039_03
hgs
parents:
diff changeset
    71
989397f9511c 201039_03
hgs
parents:
diff changeset
    72
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    73
// AdvSecSettingsCertTrustSettingsView::setCertificate()
989397f9511c 201039_03
hgs
parents:
diff changeset
    74
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    75
//
989397f9511c 201039_03
hgs
parents:
diff changeset
    76
void AdvSecSettingsCertTrustSettingsView::setCertificate(const AdvSecSettingsCertificate &cert)
989397f9511c 201039_03
hgs
parents:
diff changeset
    77
{
989397f9511c 201039_03
hgs
parents:
diff changeset
    78
    mCertificate = &cert;
989397f9511c 201039_03
hgs
parents:
diff changeset
    79
    mIsCertDeletable = mModel.isDeletable(cert);
989397f9511c 201039_03
hgs
parents:
diff changeset
    80
989397f9511c 201039_03
hgs
parents:
diff changeset
    81
    menu()->clearActions();
989397f9511c 201039_03
hgs
parents:
diff changeset
    82
    if (mIsCertDeletable) {
989397f9511c 201039_03
hgs
parents:
diff changeset
    83
        HbAction *deleteAction = new HbAction(hbTrId("txt_common_menu_delete"));
989397f9511c 201039_03
hgs
parents:
diff changeset
    84
        connect(deleteAction, SIGNAL(triggered()), this, SLOT(deleteCertificate()));
989397f9511c 201039_03
hgs
parents:
diff changeset
    85
        menu()->addAction(deleteAction);
989397f9511c 201039_03
hgs
parents:
diff changeset
    86
    }
989397f9511c 201039_03
hgs
parents:
diff changeset
    87
989397f9511c 201039_03
hgs
parents:
diff changeset
    88
    mUsageIdAndTrust.clear();
989397f9511c 201039_03
hgs
parents:
diff changeset
    89
    mModel.getTrustSettings(cert, mUsageIdAndTrust);
989397f9511c 201039_03
hgs
parents:
diff changeset
    90
}
989397f9511c 201039_03
hgs
parents:
diff changeset
    91
989397f9511c 201039_03
hgs
parents:
diff changeset
    92
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    93
// AdvSecSettingsCertTrustSettingsView::refreshDisplay()
989397f9511c 201039_03
hgs
parents:
diff changeset
    94
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
    95
//
989397f9511c 201039_03
hgs
parents:
diff changeset
    96
void AdvSecSettingsCertTrustSettingsView::refreshDisplay()
989397f9511c 201039_03
hgs
parents:
diff changeset
    97
{
989397f9511c 201039_03
hgs
parents:
diff changeset
    98
    if (mDataFormModel) {
989397f9511c 201039_03
hgs
parents:
diff changeset
    99
        mDataForm->setModel(0);
989397f9511c 201039_03
hgs
parents:
diff changeset
   100
        delete mDataFormModel;
989397f9511c 201039_03
hgs
parents:
diff changeset
   101
        mDataFormModel = 0;
989397f9511c 201039_03
hgs
parents:
diff changeset
   102
    }
989397f9511c 201039_03
hgs
parents:
diff changeset
   103
    mDataFormModel = new HbDataFormModel(this);
989397f9511c 201039_03
hgs
parents:
diff changeset
   104
989397f9511c 201039_03
hgs
parents:
diff changeset
   105
    QMapIterator<int,bool> iter(mUsageIdAndTrust);
989397f9511c 201039_03
hgs
parents:
diff changeset
   106
    while (iter.hasNext()) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   107
        iter.next();
989397f9511c 201039_03
hgs
parents:
diff changeset
   108
        HbDataFormModelItem *item = mDataFormModel->appendDataFormItem(
989397f9511c 201039_03
hgs
parents:
diff changeset
   109
            HbDataFormModelItem::ToggleValueItem, usageName(iter.key()));
989397f9511c 201039_03
hgs
parents:
diff changeset
   110
        if (iter.value()) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   111
            // TODO: localized UI string needed
989397f9511c 201039_03
hgs
parents:
diff changeset
   112
            item->setContentWidgetData(KText, tr("On"));
989397f9511c 201039_03
hgs
parents:
diff changeset
   113
            item->setContentWidgetData(KAdditionalText, tr("Off"));
989397f9511c 201039_03
hgs
parents:
diff changeset
   114
        } else {
989397f9511c 201039_03
hgs
parents:
diff changeset
   115
            // TODO: localized UI string needed
989397f9511c 201039_03
hgs
parents:
diff changeset
   116
            item->setContentWidgetData(KText, tr("Off"));
989397f9511c 201039_03
hgs
parents:
diff changeset
   117
            item->setContentWidgetData(KAdditionalText, tr("On"));
989397f9511c 201039_03
hgs
parents:
diff changeset
   118
        }
989397f9511c 201039_03
hgs
parents:
diff changeset
   119
        if (!mIsCertDeletable) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   120
            item->setEnabled(false);
989397f9511c 201039_03
hgs
parents:
diff changeset
   121
        }
989397f9511c 201039_03
hgs
parents:
diff changeset
   122
    }
989397f9511c 201039_03
hgs
parents:
diff changeset
   123
    connect(mDataFormModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)),
989397f9511c 201039_03
hgs
parents:
diff changeset
   124
        this, SLOT(toggleChange(QModelIndex)));
989397f9511c 201039_03
hgs
parents:
diff changeset
   125
989397f9511c 201039_03
hgs
parents:
diff changeset
   126
    mViewLabel->setHeading(mCertificate->label());
989397f9511c 201039_03
hgs
parents:
diff changeset
   127
    mDataForm->setModel(mDataFormModel);
989397f9511c 201039_03
hgs
parents:
diff changeset
   128
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   129
989397f9511c 201039_03
hgs
parents:
diff changeset
   130
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   131
// AdvSecSettingsCertTrustSettingsView::toggleChange()
989397f9511c 201039_03
hgs
parents:
diff changeset
   132
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   133
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   134
void AdvSecSettingsCertTrustSettingsView::toggleChange(const QModelIndex &itemIndex)
989397f9511c 201039_03
hgs
parents:
diff changeset
   135
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   136
    if (mIsCertDeletable) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   137
        HbDataFormModelItem *item = mDataFormModel->itemFromIndex(itemIndex);
989397f9511c 201039_03
hgs
parents:
diff changeset
   138
989397f9511c 201039_03
hgs
parents:
diff changeset
   139
        int usageId = 0;
989397f9511c 201039_03
hgs
parents:
diff changeset
   140
        QString label = item->label();
989397f9511c 201039_03
hgs
parents:
diff changeset
   141
        QMapIterator<int,QString> iter(mUsageIdAndName);
989397f9511c 201039_03
hgs
parents:
diff changeset
   142
        while (iter.hasNext() && !usageId) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   143
            iter.next();
989397f9511c 201039_03
hgs
parents:
diff changeset
   144
            if (label == iter.value()) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   145
                usageId = iter.key();
989397f9511c 201039_03
hgs
parents:
diff changeset
   146
            }
989397f9511c 201039_03
hgs
parents:
diff changeset
   147
        }
989397f9511c 201039_03
hgs
parents:
diff changeset
   148
989397f9511c 201039_03
hgs
parents:
diff changeset
   149
        if (usageId) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   150
            QVariant data = item->contentWidgetData(KText);
989397f9511c 201039_03
hgs
parents:
diff changeset
   151
            if (data.toString() == tr("On")) {      // TODO: use localized UI string
989397f9511c 201039_03
hgs
parents:
diff changeset
   152
                mUsageIdAndTrust[usageId] = true;
989397f9511c 201039_03
hgs
parents:
diff changeset
   153
            } else {
989397f9511c 201039_03
hgs
parents:
diff changeset
   154
                mUsageIdAndTrust[usageId] = false;
989397f9511c 201039_03
hgs
parents:
diff changeset
   155
            }
989397f9511c 201039_03
hgs
parents:
diff changeset
   156
        }
989397f9511c 201039_03
hgs
parents:
diff changeset
   157
    }
989397f9511c 201039_03
hgs
parents:
diff changeset
   158
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   159
989397f9511c 201039_03
hgs
parents:
diff changeset
   160
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   161
// AdvSecSettingsCertTrustSettingsView::saveTrustSettings()
989397f9511c 201039_03
hgs
parents:
diff changeset
   162
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   163
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   164
void AdvSecSettingsCertTrustSettingsView::saveTrustSettings()
989397f9511c 201039_03
hgs
parents:
diff changeset
   165
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   166
    if (mIsCertDeletable) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   167
        Q_ASSERT(mCertificate != 0);
989397f9511c 201039_03
hgs
parents:
diff changeset
   168
        mModel.setTrustSettings(*mCertificate, mUsageIdAndTrust);
989397f9511c 201039_03
hgs
parents:
diff changeset
   169
    }
989397f9511c 201039_03
hgs
parents:
diff changeset
   170
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   171
989397f9511c 201039_03
hgs
parents:
diff changeset
   172
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   173
// AdvSecSettingsCertTrustSettingsView::deleteCertificate()
989397f9511c 201039_03
hgs
parents:
diff changeset
   174
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   175
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   176
void AdvSecSettingsCertTrustSettingsView::deleteCertificate()
989397f9511c 201039_03
hgs
parents:
diff changeset
   177
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   178
    Q_ASSERT(mCertificate != 0);
989397f9511c 201039_03
hgs
parents:
diff changeset
   179
    // TODO: localized UI string needed
989397f9511c 201039_03
hgs
parents:
diff changeset
   180
    QString confirmText(tr("Delete %1?").arg(mCertificate->label()));
989397f9511c 201039_03
hgs
parents:
diff changeset
   181
    displayQuestionNote(confirmText, this, SLOT(deleteConfirmationAccepted()));
989397f9511c 201039_03
hgs
parents:
diff changeset
   182
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   183
989397f9511c 201039_03
hgs
parents:
diff changeset
   184
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   185
// AdvSecSettingsCertTrustSettingsView::deleteConfirmationAccepted()
989397f9511c 201039_03
hgs
parents:
diff changeset
   186
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   187
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   188
void AdvSecSettingsCertTrustSettingsView::deleteConfirmationAccepted()
989397f9511c 201039_03
hgs
parents:
diff changeset
   189
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   190
    Q_ASSERT(mCertificate != 0);
989397f9511c 201039_03
hgs
parents:
diff changeset
   191
    mModel.deleteCertificate(*mCertificate);
989397f9511c 201039_03
hgs
parents:
diff changeset
   192
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   193
989397f9511c 201039_03
hgs
parents:
diff changeset
   194
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   195
// AdvSecSettingsCertTrustSettingsView::usageName()
989397f9511c 201039_03
hgs
parents:
diff changeset
   196
// ---------------------------------------------------------------------------
989397f9511c 201039_03
hgs
parents:
diff changeset
   197
//
989397f9511c 201039_03
hgs
parents:
diff changeset
   198
QString AdvSecSettingsCertTrustSettingsView::usageName(int usageId)
989397f9511c 201039_03
hgs
parents:
diff changeset
   199
{
989397f9511c 201039_03
hgs
parents:
diff changeset
   200
    if (mUsageIdAndName.isEmpty()) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   201
        mModel.getCertificateUsageNames(mUsageIdAndName);
989397f9511c 201039_03
hgs
parents:
diff changeset
   202
    }
989397f9511c 201039_03
hgs
parents:
diff changeset
   203
989397f9511c 201039_03
hgs
parents:
diff changeset
   204
    QString name;
989397f9511c 201039_03
hgs
parents:
diff changeset
   205
    if (mUsageIdAndName.contains(usageId)) {
989397f9511c 201039_03
hgs
parents:
diff changeset
   206
        name = mUsageIdAndName.value(usageId);
989397f9511c 201039_03
hgs
parents:
diff changeset
   207
    } else {
989397f9511c 201039_03
hgs
parents:
diff changeset
   208
        name = QString(KHexUsageIdFormat).arg(usageId, KHexFieldWidth, KHexBase);
989397f9511c 201039_03
hgs
parents:
diff changeset
   209
    }
989397f9511c 201039_03
hgs
parents:
diff changeset
   210
    return name;
989397f9511c 201039_03
hgs
parents:
diff changeset
   211
}
989397f9511c 201039_03
hgs
parents:
diff changeset
   212