void HgWidgetOptionsView::resizeEvent(QGraphicsSceneResizeEvent *event)
{
    FUNC_LOG;

    if (mUpdateWidgetSize) {
        mContentReady = false;
        HbDataFormModelItem *item = mModel->itemFromIndex(mModel->index(ItemWidgetHeight, 0));
        if (item) {
            item->setContentWidgetData(QString("text"), event->newSize().height());
        }

        item = mModel->itemFromIndex(mModel->index(ItemWidgetWidth, 0));
        if (item) {
            item->setContentWidgetData(QString("text"), event->newSize().width());
        }
        mContentReady = true;
    }
}
HgWidgetOptionsView::HgWidgetOptionsView(QGraphicsItem *parent) :
    HbView(parent),
    mForm(new HbDataForm(this)),
    mModel(new HbDataFormModel(this)),
    mContentReady(false),
    mUpdateWidgetSize(true)
{
    HbAction *backAction = new HbAction(Hb::BackNaviAction);
    connect(backAction, SIGNAL(triggered()), SIGNAL(optionsClosed()));
    setNavigationAction(backAction);

    HbDataFormModelItem *item = mModel->appendDataFormItem(
        HbDataFormModelItem::ComboBoxItem, WIDGET_TYPE);
    item->setContentWidgetData(QString("items"), QStringList("Grid") << "Coverflow" << "T-Bone");

    item = mModel->appendDataFormItem(
        HbDataFormModelItem::ComboBoxItem, SCROLLBAR_VISIBILITY);
    item->setContentWidgetData(QString("items"), QStringList("Autohide") << "Always on" << "Always off");

    item = mModel->appendDataFormItem(
        HbDataFormModelItem::ToggleValueItem, INTERACTIVE_SCROLLBAR);
    item->setContentWidgetData(QString("text"), QString("no"));
    item->setContentWidgetData(QString("additionalText"), QString("yes"));

    item = mModel->appendDataFormItem(
        HbDataFormModelItem::ComboBoxItem, MODEL_IMAGE_TYPE);
    item->setContentWidgetData(QString("items"), QStringList("QImage") << "HbIcon" << "QIcon" << "QPixmap");

    item = mModel->appendDataFormItem(
        HbDataFormModelItem::TextItem, WIDGET_HEIGHT);
    item->setContentWidgetData(QString("text"), QString("0"));
    item->setContentWidgetData(QString("inputMethodHints"), Qt::ImhDigitsOnly);

    item = mModel->appendDataFormItem(
        HbDataFormModelItem::TextItem, WIDGET_WIDTH);
    item->setContentWidgetData(QString("text"), QString("0"));
    item->setContentWidgetData(QString("inputMethodHints"), Qt::ImhDigitsOnly);

    item = mModel->appendDataFormItem(
        HbDataFormModelItem::ToggleValueItem, LOW_RES_IMAGES);
    item->setContentWidgetData(QString("text"), QString("no"));
    item->setContentWidgetData(QString("additionalText"), QString("yes"));

    item = mModel->appendDataFormItem(
        HbDataFormModelItem::ComboBoxItem, TITLE_FONT);
    item->setContentWidgetData(QString("items"), QStringList("Primary") << "Secondary" << "Title" << "Primary small" << "Digital");

    item = mModel->appendDataFormItem(
        HbDataFormModelItem::ComboBoxItem, DESCRIPTION_FONT);
    item->setContentWidgetData(QString("items"), QStringList("Primary") << "Secondary" << "Title" << "Primary small" << "Digital");

    item = mModel->appendDataFormItem(
        HbDataFormModelItem::ToggleValueItem, REFLECTIONS_ENABLED);
    item->setContentWidgetData(QString("text"), QString("no"));
    item->setContentWidgetData(QString("additionalText"), QString("yes"));

    item = mModel->appendDataFormItem(
        HbDataFormModelItem::ToggleValueItem, EFFECT3D_ENABLED);
    item->setContentWidgetData(QString("text"), QString("no"));
    item->setContentWidgetData(QString("additionalText"), QString("yes"));
    
    item = mModel->appendDataFormItem(
        HbDataFormModelItem::ToggleValueItem, ITEM_SIZE_POLICY);
    item->setContentWidgetData(QString("text"), QString("User defined"));
    item->setContentWidgetData(QString("additionalText"), QString("Automatic"));

    connect(mModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), SLOT(updateData(QModelIndex, QModelIndex)));
    mForm->setModel(mModel);

    setupData();
    mContentReady = true;

    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
    layout->addItem(mForm);
    setLayout(layout);
}
void HgWidgetOptionsView::setupData()
{
    FUNC_LOG;

    QSettings settings(SETT_ORGANIZATION, SETT_APPLICATION);

    HbDataFormModelItem *item = mModel->itemFromIndex(mModel->index(ItemWidgetType, 0));
    QVariant value = settings.value(SETT_WIDGET_TYPE);
    if (item && value.isValid()) {
        int index(0);
        switch (value.toInt()) {
            case HgWidgetGrid:
                index = 0;
                break;
            case HgWidgetCoverflow:
                index = 1;
                break;
            case HgWidgetTBone:
                index = 2;
                break;
            default: break;
        }
        item->setContentWidgetData(QString("currentIndex"), index);
        setCoverflowEnabled(index == 1 || index  == 2);
    }

    item = mModel->itemFromIndex(mModel->index(ItemScrollBarVisibility, 0));
    value = settings.value(SETT_SCROLLBAR_VISIBILITY);
    if (item && value.isValid()) {
        int index(0);
        switch (value.toInt()) {
            case HgWidget::ScrollBarAutoHide:
                index = 0;
                break;
            case HgWidget::ScrollBarAlwaysOn:
                index = 1;
                break;
            case HgWidget::ScrollBarAlwaysOff:
                index = 2;
                break;
            default: break;
        }
        item->setContentWidgetData(QString("currentIndex"), index);
    }

    item = mModel->itemFromIndex(mModel->index(ItemScrollBarInteractivity, 0));
    value = settings.value(SETT_SCROLLBAR_INTERACTIVITY);
    if (item && value.isValid()) {
        item->setContentWidgetData(QString("text"), value.toBool() ? "yes" : "no");
        item->setContentWidgetData(QString("additionalText"), value.toBool() ? "no" : "yes");
    }

    item = mModel->itemFromIndex(mModel->index(ItemModelImageType, 0));
    value = settings.value(SETT_MODEL_IMAGE_TYPE);
    if (item && value.isValid()) {
        int index(0);
        switch (value.toInt()) {
            case ImageTypeQImage:
                index = 0;
                break;
            case ImageTypeHbIcon:
                index = 1;
                break;
            case ImageTypeQIcon:
                index = 2;
                break;
            case ImageTypeQPixmap:
                index = 3;
                break;
            default: break;
        }
        item->setContentWidgetData(QString("currentIndex"), index);
    }

    item = mModel->itemFromIndex(mModel->index(ItemWidgetHeight, 0));
    value = settings.value(SETT_WIDGET_HEIGHT);
    if (item && value.isValid()) {
        item->setContentWidgetData(QString("text"), value.toInt());
        mUpdateWidgetSize = false;
    }

    item = mModel->itemFromIndex(mModel->index(ItemWidgetWidth, 0));
    value = settings.value(SETT_WIDGET_WIDTH);
    if (item && value.isValid()) {
        item->setContentWidgetData(QString("text"), value.toInt());
        mUpdateWidgetSize = false;
    }

    item = mModel->itemFromIndex(mModel->index(ItemLowResImages, 0));
    value = settings.value(SETT_LOW_RES_IMAGES);
    if (item && value.isValid()) {
        item->setContentWidgetData(QString("text"), value.toBool() ? "yes" : "no");
        item->setContentWidgetData(QString("additionalText"), value.toBool() ? "no" : "yes");
    }

    item = mModel->itemFromIndex(mModel->index(ItemTitleFont, 0));
    value = settings.value(SETT_TITLE_FONT);
    if (item && value.isValid()) {
        int index(0);
        switch (value.toInt()) {
            case HbFontSpec::Primary:
                index = 0;
                break;
            case HbFontSpec::Secondary:
                index = 1;
                break;
            case HbFontSpec::Title:
                index = 2;
                break;
            case HbFontSpec::PrimarySmall:
                index = 3;
                break;
            case HbFontSpec::Digital:
                index = 4;
                break;
            default: break;
        }
        item->setContentWidgetData(QString("currentIndex"), index);
    }

    item = mModel->itemFromIndex(mModel->index(ItemDescriptionFont, 0));
    value = settings.value(SETT_DESCRIPTION_FONT);
    if (item && value.isValid()) {
        int index(0);
        switch (value.toInt()) {
            case HbFontSpec::Primary:
                index = 0;
                break;
            case HbFontSpec::Secondary:
                index = 1;
                break;
            case HbFontSpec::Title:
                index = 2;
                break;
            case HbFontSpec::PrimarySmall:
                index = 3;
                break;
            case HbFontSpec::Digital:
                index = 4;
                break;
            default: break;
        }
        item->setContentWidgetData(QString("currentIndex"), index);
    }

    item = mModel->itemFromIndex(mModel->index(ItemReflectionEnabled, 0));
    value = settings.value(SETT_REFLECTIONS_ENABLED);
    if (item && value.isValid()) {
        item->setContentWidgetData(QString("text"), value.toBool() ? "yes" : "no");
        item->setContentWidgetData(QString("additionalText"), value.toBool() ? "no" : "yes");
    }

    item = mModel->itemFromIndex(mModel->index(ItemEffect3dEnabled, 0));
    value = settings.value(SETT_EFFECT3D_ENABLED);
    if (item && value.isValid()) {
        item->setContentWidgetData(QString("text"), value.toBool() ? "yes" : "no");
        item->setContentWidgetData(QString("additionalText"), value.toBool() ? "no" : "yes");
    }
    
    item = mModel->itemFromIndex(mModel->index(ItemItemSizePolicy, 0));
    value = settings.value(SETT_ITEM_SIZE_POLICY);
    if (item && value.isValid()) {
        if (value.toInt() == HgWidget::ItemSizeAutomatic) {
            item->setContentWidgetData(QString("text"), "Automatic");
            item->setContentWidgetData(QString("additionalText"), "User defined");
        }
        else {
            item->setContentWidgetData(QString("text"), "User defined");
            item->setContentWidgetData(QString("additionalText"), "Automatic");
        }
    }
}
void HgWidgetOptionsView::updateData(QModelIndex startIn, QModelIndex endIn)
{
    Q_UNUSED(endIn);

    if (!mContentReady) return;

    QSettings settings(SETT_ORGANIZATION, SETT_APPLICATION);

    HbDataFormModelItem *item = mModel->itemFromIndex(startIn);
    if( !item ) return;
    
    if (item->data(HbDataFormModelItem::LabelRole).toString() == WIDGET_TYPE) {
        int index = item->contentWidgetData(QString("currentIndex")).toInt();
        HgTestWidgetType type = HgWidgetNone;
        switch (index) {
            case 0:
                type = HgWidgetGrid;
                break;
            case 1:
                type = HgWidgetCoverflow;
                break;
            case 2:
                type = HgWidgetTBone;
                break;
            default: break;
        }

        setCoverflowEnabled(index == 1 || index  == 2);
        settings.setValue(SETT_WIDGET_TYPE, type);
        emit widgetTypeChanged(type);
    }
    else if (item->data(HbDataFormModelItem::LabelRole).toString() == SCROLLBAR_VISIBILITY) {
        int index = item->contentWidgetData(QString("currentIndex")).toInt();
        HgWidget::ScrollBarPolicy visibility = HgWidget::ScrollBarAutoHide;
        switch (index) {
            case 0:
                visibility = HgWidget::ScrollBarAutoHide;
                break;
            case 1:
                visibility = HgWidget::ScrollBarAlwaysOn;
                break;
            case 2:
                visibility = HgWidget::ScrollBarAlwaysOff;
                break;
            default: break;
        }

        settings.setValue(SETT_SCROLLBAR_VISIBILITY, visibility);
        emit scrollBarVisibilityChanged(visibility);
    }
    else if (item->data(HbDataFormModelItem::LabelRole).toString() == INTERACTIVE_SCROLLBAR) {
        QVariant data = item->contentWidgetData(QString("text"));
        bool value = data.toString() == "yes";
        settings.setValue(SETT_SCROLLBAR_INTERACTIVITY, value);
        if (value) {
            item = mModel->itemFromIndex(mModel->index(ItemScrollBarVisibility, 0));
            if (item) {
                item->setContentWidgetData(QString("currentIndex"), 1); // Set scroll bar always on
            }
        }
        emit scrollBarInteractivityChanged(value);
    }
    else if (item->data(HbDataFormModelItem::LabelRole).toString() == MODEL_IMAGE_TYPE) {
        int index = item->contentWidgetData(QString("currentIndex")).toInt();
        HgTestImageType type = ImageTypeNone;
        switch (index) {
            case 0:
                type = ImageTypeQImage;
                break;
            case 1:
                type = ImageTypeHbIcon;
                break;
            case 2:
                type = ImageTypeQIcon;
                break;
            case 3:
                type = ImageTypeQPixmap;
                break;
            default: break;
        }

        settings.setValue(SETT_MODEL_IMAGE_TYPE, type);
        emit imageTypeChanged(type);
    }
    else if (item->data(HbDataFormModelItem::LabelRole).toString() == WIDGET_HEIGHT) {
        emit widgetHeightChanged(item->contentWidgetData(QString("text")).toInt());
        storeWidgetSize();
    }
    else if (item->data(HbDataFormModelItem::LabelRole).toString() == WIDGET_WIDTH) {
        emit widgetWidthChanged(item->contentWidgetData(QString("text")).toInt());
        storeWidgetSize();

    }
    else if (item->data(HbDataFormModelItem::LabelRole).toString() == LOW_RES_IMAGES) {
        QVariant data = item->contentWidgetData(QString("text"));
        bool value = data.toString() == "yes";
        settings.setValue(SETT_LOW_RES_IMAGES, value);
        emit lowResImageUseChanged(value);
    }
    else if (item->data(HbDataFormModelItem::LabelRole).toString() == TITLE_FONT) {
        int index = item->contentWidgetData(QString("currentIndex")).toInt();
        HbFontSpec::Role role = HbFontSpec::Undefined;
        switch (index) {
            case 0:
                role = HbFontSpec::Primary;
                break;
            case 1:
                role = HbFontSpec::Secondary;
                break;
            case 2:
                role = HbFontSpec::Title;
                break;
            case 3:
                role = HbFontSpec::PrimarySmall;
                break;
            case 4:
                role = HbFontSpec::Digital;
                break;
            default: break;
        }
        settings.setValue(SETT_TITLE_FONT, role);
        emit titleFontChanged(HbFontSpec(role));
    }
    else if (item->data(HbDataFormModelItem::LabelRole).toString() == DESCRIPTION_FONT) {
        int index = item->contentWidgetData(QString("currentIndex")).toInt();
        HbFontSpec::Role role = HbFontSpec::Undefined;
        switch (index) {
            case 0:
                role = HbFontSpec::Primary;
                break;
            case 1:
                role = HbFontSpec::Secondary;
                break;
            case 2:
                role = HbFontSpec::Title;
                break;
            case 3:
                role = HbFontSpec::PrimarySmall;
                break;
            case 4:
                role = HbFontSpec::Digital;
                break;
            default: break;
        }
        settings.setValue(SETT_DESCRIPTION_FONT, role);
        emit descriptionFontChanged(HbFontSpec(role));
    }
    else if (item->data(HbDataFormModelItem::LabelRole).toString() == REFLECTIONS_ENABLED) {
        QVariant data = item->contentWidgetData(QString("text"));
        bool value = data.toString() == "yes";
        settings.setValue(SETT_REFLECTIONS_ENABLED, value);
        emit reflectionsEnabledChanged(value);
    }
    else if (item->data(HbDataFormModelItem::LabelRole).toString() == EFFECT3D_ENABLED) {
        QVariant data = item->contentWidgetData(QString("text"));
        bool value = data.toString() == "yes";
        settings.setValue(SETT_EFFECT3D_ENABLED, value);
        emit effect3dEnabledChanged(value);
    }
    else if (item->data(HbDataFormModelItem::LabelRole).toString() == ITEM_SIZE_POLICY) {
        QVariant data = item->contentWidgetData(QString("text"));
        HgWidget::ItemSizePolicy value = (data.toString() == "Automatic" ? HgWidget::ItemSizeAutomatic : HgWidget::ItemSizeUserDefined);
        settings.setValue(SETT_ITEM_SIZE_POLICY, value);
        emit itemSizePolicyChanged(value);
    }
}