userguide/src/HelpCategoryView.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 16 Apr 2010 14:53:45 +0300
changeset 13 1eb8015a8491
child 15 c0dfc135a46c
permissions -rw-r--r--
Revision: 201011 Kit: 201015

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: 
*
*/

#include <QStandardItemModel>
#include <QDebug>

#include <hbmainwindow.h>
#include <hbapplication.h>
#include <hbaction.h>

#include <hbtreeview.h>
#include <hbtoolbar.h>
#include <hbsearchpanel.h>
#include <hbscrollbar.h>
#include <hblineedit.h>
#include <hbmenu.h>

#include "HelpDocumentLoader.h"
#include "HelpDataProvider.h"
#include "HelpProxyModel.h"

#include "HelpCategoryView.h"


//////////////////////////////////////////////////////////////////////////////////////////////

HelpCategoryView::HelpCategoryView() : 
mViewMode(ViewModeNull), 
mListAll(NULL), 
mListSearch(NULL), 
mSearchPanel(NULL), 
mToolBar(NULL)
{
}

HelpCategoryView::~HelpCategoryView()
{
}


////////////////////////////////////////////////////////////////////////////////////////////

void HelpCategoryView::init()
{
    initBackAction();
    initAllList();
    initSearchList();
    initSearchPanel();
    initToolbar();

    switchViewMode(ViewModeAll);
    
    connect(mainWindow(), SIGNAL(currentViewChanged(HbView*)), this, SLOT(onCurrentViewChanged(HbView*)));
    connect(mainWindow(), SIGNAL(orientationChanged(Qt::Orientation)), this, SLOT(onOrientationChanged(Qt::Orientation)));
}

void HelpCategoryView::initBackAction()
{
    mSoftKeyAction = new HbAction(Hb::BackAction);
    connect(mSoftKeyAction, SIGNAL(triggered()), this, SLOT(onBackAction()));
}

void HelpCategoryView::initAllList()
{
    mListAll = HelpUIBuilder::findWidget<HbTreeView*>(DOCML_LIST_CATEGORY_ALL);
    mListAll->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
    mListAll->setModel(HelpDataProvider::instance()->getCategoryData());
    connect(mListAll, SIGNAL(activated(const QModelIndex&)), this, SLOT(onAllListActivated(const QModelIndex&)));
}

void HelpCategoryView::initSearchList()
{
    mListSearch = HelpUIBuilder::findWidget<HbTreeView*>(DOCML_LIST_CATEGORY_SEARCH);
    mListSearch->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
    mListSearch->setModel(HelpDataProvider::instance()->getSearchData());
    connect(mListSearch, SIGNAL(activated(const QModelIndex&)), this, SLOT(onSearchListActivated(const QModelIndex&)));
}
void HelpCategoryView::initSearchPanel()
{
    mSearchPanel = HelpUIBuilder::findWidget<HbSearchPanel*>(DOCML_SEARCH_PANEL_CATEGORY);
    connect(mSearchPanel, SIGNAL(exitClicked()), this, SLOT(onSearchPanelExitClicked()));
    connect(mSearchPanel, SIGNAL(criteriaChanged(const QString&)), this, SLOT(onSearchPanelCriteriaChanged(const QString&)));
}

void HelpCategoryView::initToolbar()
{
    mToolBar = HelpUIBuilder::findWidget<HbToolBar*>(DOCML_TOOLBAR);

    HbAction* allAction = HelpUIBuilder::findObject<HbAction*>(DOCML_ACTION_ALL);
    HbAction* findAction = HelpUIBuilder::findObject<HbAction*>(DOCML_ACTION_SEARCH);
    QActionGroup* toolBarActionGroup = new QActionGroup(mToolBar);
    allAction->setActionGroup(toolBarActionGroup);
    findAction->setActionGroup(toolBarActionGroup);
}


////////////////////////////////////////////////////////////////////////////////////////////

void HelpCategoryView::switchViewMode(ViewMode viewMode)
{
    if(ViewModeNull == viewMode) return;
    
    mViewMode = viewMode;
    if(ViewModeAll == viewMode)
    {
        HelpUIBuilder::load(QRC_DOCML_CATEGORY, DOCML_LAYOUT_CATEGORY_ALL);
    }
    else if(ViewModeSearch == viewMode)
    {
        HelpUIBuilder::load(QRC_DOCML_CATEGORY, DOCML_LAYOUT_CATEGORY_SEARCH);
    }

    RefreshTitlebarVisibility();
}


////////////////////////////////////////////////////////////////////////////////////////////

void HelpCategoryView::RefreshToolbarText(bool isLandscape)
{
    HbAction* tollbarAction = HelpUIBuilder::findObject<HbAction*>(DOCML_ACTION_ALL);
    tollbarAction->setText(isLandscape ? qtTrId(TXT_BUTTON_ALL) : QString());

    tollbarAction = HelpUIBuilder::findObject<HbAction*>(DOCML_ACTION_SEARCH);
    tollbarAction->setText(isLandscape ? qtTrId(TXT_BUTTON_FIND) : QString());

    tollbarAction = HelpUIBuilder::findObject<HbAction*>(DOCML_ACTION_LINK_NOKIA);
    tollbarAction->setText(isLandscape ? qtTrId(TXT_BUTTON_LINK_SUPPORT) : QString());
}

void HelpCategoryView::RefreshTitlebarVisibility()
{
	setTitleBarVisible(!(mSearchPanel->isVisible()));
}

void HelpCategoryView::ResetSearchPanel()
{
    foreach(QGraphicsItem *obj, mSearchPanel->childItems())
    {
        QGraphicsWidget *const widget = static_cast<QGraphicsWidget*>(obj);
        if(widget != NULL)
        {
            HbLineEdit *const lineEdit = qobject_cast<HbLineEdit*>(widget);
            if(lineEdit != NULL)
            {
                lineEdit->setText("");
                break;
            }
        }
    }
}

////////////////////////////////////////////////////////////////////////////////////////////
// handle system event

void HelpCategoryView::onCurrentViewChanged(HbView *view)
{
    if(this == view)
    {
        setNavigationAction(mSoftKeyAction);        
    }
}

void HelpCategoryView::onOrientationChanged(Qt::Orientation orientation)
{
    bool isLandscape = (Qt::Horizontal==orientation);
    RefreshToolbarText(isLandscape);
}


///////////////////////////////////////////////////////////////////////////////////////
// handle button back action

void HelpCategoryView::onBackAction()
{
	if(this == mainWindow()->currentView())
	{
		HbApplication::exit();
	}
}


////////////////////////////////////////////////////////////////////////////////////////////
// handle list event

void HelpCategoryView::onAllListActivated(const QModelIndex& index)
{
    if(!index.isValid() ||          // invalid
       index.child(0,0).isValid())  // this is a node
    {
        return;
    }

    QString uid = mListAll->model()->data(index.parent(), UidRole).toString();
    QString href = mListAll->model()->data(index, HrefRole).toString();
    HelpDataProvider::instance()->setHelpContentUrl(uid, href);
    emit activateView(HelpViewContents);
}

void HelpCategoryView::onSearchListActivated(const QModelIndex& index)
{
    if(!index.isValid() ||          // invalid
       index.child(0,0).isValid())  // this is a node
    {
        return;
    }
    
    QString uid = mListSearch->model()->data(index, UidRole).toString();
    QString href = mListSearch->model()->data(index, HrefRole).toString();
    HelpDataProvider::instance()->setHelpContentUrl(uid, href);
    emit activateView(HelpViewContents);
}


////////////////////////////////////////////////////////////////////////////////////////////
// handle search panel event

void HelpCategoryView::onSearchPanelExitClicked()
{
    setTitleBarVisible(true);
    HelpUIBuilder::load(QRC_DOCML_CATEGORY, DOCML_LAYOUT_CATEGORY_SEARCH_NO_SRHPAL);
}

void HelpCategoryView::onSearchPanelCriteriaChanged(const QString &criteria)
{
    mListSearch->setModel(HelpDataProvider::instance()->getSearchData(criteria));
    mListSearch->update();
}


// end of file