userguide/src/HelpCategoryView.cpp
changeset 18 375271912456
parent 15 c0dfc135a46c
child 34 4533d75b8d4e
equal deleted inserted replaced
15:c0dfc135a46c 18:375271912456
    19 #include <QDebug>
    19 #include <QDebug>
    20 
    20 
    21 #include <hbmainwindow.h>
    21 #include <hbmainwindow.h>
    22 #include <hbapplication.h>
    22 #include <hbapplication.h>
    23 #include <hbaction.h>
    23 #include <hbaction.h>
    24 #include <hbtoolbar.h>
       
    25 #include <hblabel.h>
       
    26 
    24 
    27 #include <hbtreeview.h>
    25 #include <hbtreeview.h>
    28 #include <hblistview.h>
       
    29 #include <hbsearchpanel.h>
       
    30 #include <hbscrollbar.h>
    26 #include <hbscrollbar.h>
    31 #include <hblineedit.h>
       
    32 #include <hbmenu.h>
    27 #include <hbmenu.h>
    33 #include <hbstaticvkbhost.h>
       
    34 #include <hbgroupbox.h>
       
    35 
    28 
    36 #include "HelpDataProvider.h"
    29 #include "HelpDataProvider.h"
    37 #include "HelpProxyModel.h"
       
    38 
    30 
    39 #include "HelpCategoryView.h"
    31 #include "HelpCategoryView.h"
    40 
    32 
    41 
    33 
    42 //////////////////////////////////////////////////////////////////////////////////////////////
    34 //////////////////////////////////////////////////////////////////////////////////////////////
    43 
    35 
    44 HelpCategoryView::HelpCategoryView() : 
    36 HelpCategoryView::HelpCategoryView() : 
    45 mViewMode(ViewModeNull), 
    37 mListAll(NULL),
    46 mListAll(NULL), 
    38 mExpandCount(0)
    47 mListSearch(NULL), 
       
    48 mSearchPanel(NULL)
       
    49 {
    39 {
    50 }
    40 }
    51 
    41 
    52 HelpCategoryView::~HelpCategoryView()
    42 HelpCategoryView::~HelpCategoryView()
    53 {
    43 {
    57 ////////////////////////////////////////////////////////////////////////////////////////////
    47 ////////////////////////////////////////////////////////////////////////////////////////////
    58 
    48 
    59 void HelpCategoryView::init()
    49 void HelpCategoryView::init()
    60 {
    50 {
    61 	initDocMl();
    51 	initDocMl();
    62     initBackAction();
       
    63     initAllList();
    52     initAllList();
    64     initSearchList();
       
    65     initSearchPanel();
       
    66 	initVirtualKeyboard();
       
    67 	initEmptyLabel();
       
    68 
       
    69     switchViewMode(ViewModeAll);
       
    70     
       
    71     connect(mainWindow(), SIGNAL(currentViewChanged(HbView*)), this, SLOT(onCurrentViewChanged(HbView*)));
       
    72 }
    53 }
    73 
    54 
    74 void HelpCategoryView::initDocMl()
    55 void HelpCategoryView::initDocMl()
    75 {
    56 {
    76  // Create widget hierarchy
    57 	initBaseDocMl();
    77     setObjectName( DOCML_VIEW_CATEGORY );
       
    78 
       
    79     // List existing root elements - this allows us to refer to objects in the XML 
       
    80     // which are created outside the document.
       
    81     QObjectList roots;
       
    82     roots.append( this );
       
    83 
       
    84 	mBuilder.setObjectTree(roots);
       
    85 
       
    86     mBuilder.load(QRC_DOCML_CATEGORY);
    58     mBuilder.load(QRC_DOCML_CATEGORY);
    87 }
       
    88 
       
    89 void HelpCategoryView::initBackAction()
       
    90 {
       
    91     mSoftKeyAction = new HbAction(Hb::BackAction);
       
    92     connect(mSoftKeyAction, SIGNAL(triggered()), this, SLOT(onBackAction()));
       
    93 }
    59 }
    94 
    60 
    95 void HelpCategoryView::initAllList()
    61 void HelpCategoryView::initAllList()
    96 {
    62 {
    97     mListAll = mBuilder.findWidget<HbTreeView*>(DOCML_LIST_CATEGORY_ALL);
    63     mListAll = mBuilder.findWidget<HbTreeView*>(DOCML_LIST_CATEGORY_ALL);
    98     mListAll->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
    64     mListAll->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
    99     mListAll->setModel(HelpDataProvider::instance()->getCategoryData());
    65     mListAll->setModel(HelpDataProvider::instance()->getCategoryData());
   100     connect(mListAll, SIGNAL(activated(const QModelIndex&)), this, SLOT(onAllListActivated(const QModelIndex&)));
    66     connect(mListAll, SIGNAL(activated(const QModelIndex&)), this, SLOT(onAllListActivated(const QModelIndex&)));
   101 }
       
   102 
       
   103 void HelpCategoryView::initSearchList()
       
   104 {
       
   105     mListSearch = mBuilder.findWidget<HbListView*>(DOCML_LIST_CATEGORY_SEARCH);
       
   106     mListSearch->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
       
   107     mListSearch->setModel(HelpDataProvider::instance()->getSearchData());
       
   108     connect(mListSearch, SIGNAL(activated(const QModelIndex&)), this, SLOT(onSearchListActivated(const QModelIndex&)));
       
   109 }
       
   110 void HelpCategoryView::initSearchPanel()
       
   111 {
       
   112     mSearchPanel = mBuilder.findWidget<HbSearchPanel*>(DOCML_SEARCH_PANEL_CATEGORY);
       
   113     connect(mSearchPanel, SIGNAL(exitClicked()), this, SLOT(onSearchPanelExitClicked()));
       
   114     connect(mSearchPanel, SIGNAL(criteriaChanged(const QString&)), this, SLOT(onSearchPanelCriteriaChanged(const QString&)));
       
   115 }
       
   116 
       
   117 void HelpCategoryView::initVirtualKeyboard()
       
   118 {
       
   119 	mVirtualKeyboard = new HbStaticVkbHost(this);
       
   120     connect(mVirtualKeyboard, SIGNAL(keypadOpened()), this, SLOT(onHandleKeypadOpen()));
       
   121     connect(mVirtualKeyboard, SIGNAL(keypadClosed()), this, SLOT(onHandleKeypadClose()));
       
   122 }
       
   123 
       
   124 void HelpCategoryView::initEmptyLabel()
       
   125 {
       
   126 	HbLabel* label = mBuilder.findWidget<HbLabel*>(DOCML_NO_MATCH_LABEL);
       
   127 	label->setFontSpec(HbFontSpec(HbFontSpec::Primary));
       
   128 }
       
   129 
       
   130 HbGroupBox* HelpCategoryView::groupBox()
       
   131 {
       
   132 	return mBuilder.findWidget<HbGroupBox*>(DOCML_GROUPBOX);
       
   133 }
       
   134 
       
   135 ////////////////////////////////////////////////////////////////////////////////////////////
       
   136 
       
   137 void HelpCategoryView::switchViewMode(ViewMode viewMode)
       
   138 {
       
   139     if(ViewModeNull == viewMode) return;
       
   140     
       
   141     mViewMode = viewMode;
       
   142     if(ViewModeAll == viewMode)
       
   143     {
       
   144         mBuilder.load(QRC_DOCML_CATEGORY, DOCML_LAYOUT_CATEGORY_ALL);
       
   145 		toolBar()->show();
       
   146     }
       
   147     else if(ViewModeSearch == viewMode)
       
   148     {
       
   149 //        mBuilder.load(QRC_DOCML_CATEGORY, DOCML_LAYOUT_CATEGORY_SEARCH);
       
   150 		ResetSearchPanel();
       
   151     }
       
   152 }
    67 }
   153 
    68 
   154 ////////////////////////////////////////////////////////////////////////////////////////////
    69 ////////////////////////////////////////////////////////////////////////////////////////////
   155 
    70 
   156 void HelpCategoryView::expandCollapseAllList(QStandardItem* item, bool expand)
    71 void HelpCategoryView::expandCollapseAllList(QStandardItem* item, bool expand)
   164 	{		
    79 	{		
   165 		expandCollapseAllList(item->child(i),expand);
    80 		expandCollapseAllList(item->child(i),expand);
   166 	}
    81 	}
   167 }
    82 }
   168 
    83 
   169 ////////////////////////////////////////////////////////////////////////////////////////////
    84 void HelpCategoryView::updateExpandCollapseAction(bool expand)
   170 
       
   171 void HelpCategoryView::updateVisibleItems(bool visible)
       
   172 {
    85 {
   173 	static Hb::SceneItems items = Hb::TitleBarItem | Hb::StatusBarItem;
    86 	HbAction* allAction = mBuilder.findObject<HbAction*>(DOCML_ACTION_EXPAND_COLLAPSE_ALL);
   174 	if(visible)
    87 	allAction->setText(expand ? hbTrId(TXT_EXPAND_ALL) : hbTrId(TXT_COLLAPSE_ALL));
   175 	{
       
   176 		showItems(items);
       
   177 	}
       
   178 	else
       
   179 	{
       
   180 		hideItems(items);
       
   181 	}
       
   182 }
    88 }
   183 
       
   184 void HelpCategoryView::ResetSearchPanel()
       
   185 {
       
   186     foreach(QGraphicsItem *obj, mSearchPanel->childItems())
       
   187     {
       
   188         QGraphicsWidget *const widget = static_cast<QGraphicsWidget*>(obj);
       
   189         if(widget != NULL)
       
   190         {
       
   191             HbLineEdit *const lineEdit = qobject_cast<HbLineEdit*>(widget);
       
   192             if(lineEdit != NULL)
       
   193             {
       
   194                 lineEdit->setText("");
       
   195                 break;
       
   196             }
       
   197         }
       
   198     }
       
   199 }
       
   200 
       
   201 ////////////////////////////////////////////////////////////////////////////////////////////
       
   202 // handle system event
       
   203 
       
   204 void HelpCategoryView::onCurrentViewChanged(HbView *view)
       
   205 {
       
   206     if(this == view)
       
   207     {
       
   208         setNavigationAction(mSoftKeyAction);        
       
   209     }
       
   210 }
       
   211 
       
   212 ///////////////////////////////////////////////////////////////////////////////////////
       
   213 // handle button back action
       
   214 
       
   215 void HelpCategoryView::onBackAction()
       
   216 {
       
   217 	if(ViewModeSearch == mViewMode)
       
   218 	{
       
   219 		switchViewMode(ViewModeAll);
       
   220 	}
       
   221 	else
       
   222 	{
       
   223 		HbApplication::exit();
       
   224 	}
       
   225 }
       
   226 
       
   227 
    89 
   228 ////////////////////////////////////////////////////////////////////////////////////////////
    90 ////////////////////////////////////////////////////////////////////////////////////////////
   229 // handle list event
    91 // handle list event
   230 
    92 
   231 void HelpCategoryView::onAllListActivated(const QModelIndex& index)
    93 void HelpCategoryView::onAllListActivated(const QModelIndex& index)
   232 {
    94 {
   233     if(!index.isValid() ||          // invalid
    95     if(!index.isValid() ||          // invalid
   234        index.child(0,0).isValid())  // this is a node
    96        index.child(0,0).isValid())  // this is a node
   235     {
    97     {
       
    98 		if(index.parent().isValid())
       
    99 		{
       
   100 			return;
       
   101 		}
       
   102 		
       
   103 		if(mListAll->isExpanded(index))
       
   104 		{
       
   105 			mExpandCount++;
       
   106 		}
       
   107 		else
       
   108 		{
       
   109 			mExpandCount--;
       
   110 		}
       
   111 		updateExpandCollapseAction(mExpandCount == 0);
   236         return;
   112         return;
   237     }
   113     }
   238 
   114 
   239     QString uid = mListAll->model()->data(index.parent(), UidRole).toString();
   115     QString uid = mListAll->model()->data(index.parent(), UidRole).toString();
   240     QString href = mListAll->model()->data(index, HrefRole).toString();
   116     QString href = mListAll->model()->data(index, HrefRole).toString();
   241     HelpDataProvider::instance()->setHelpContentUrl(uid, href);
   117     HelpDataProvider::instance()->setHelpContentUrl(uid, href);
   242     emit activateView(HelpViewContents);
   118     emit activateView(HelpViewContents);
   243 }
   119 }
   244 
   120 
   245 void HelpCategoryView::onSearchListActivated(const QModelIndex& index)
   121 ////////////////////////////////////////////////////////////////////////////////////////////
       
   122 // handle menu event
       
   123 void HelpCategoryView::onExpandOrCollapseAll()
   246 {
   124 {
   247     if(!index.isValid() ||          // invalid
   125 	bool needExpand = (mExpandCount == 0);
   248        index.child(0,0).isValid())  // this is a node
   126 	QStandardItemModel* model = (QStandardItemModel*)(mListAll->model());
   249     {
   127 	expandCollapseAllList(model->invisibleRootItem(),needExpand);
   250         return;
   128 	mExpandCount = needExpand ?  model->invisibleRootItem()->rowCount() : 0;
   251     }
   129 	updateExpandCollapseAction(mExpandCount == 0);
   252     
       
   253     QString uid = mListSearch->model()->data(index, UidRole).toString();
       
   254     QString href = mListSearch->model()->data(index, HrefRole).toString();
       
   255     HelpDataProvider::instance()->setHelpContentUrl(uid, href);
       
   256     emit activateView(HelpViewContents);
       
   257 }
   130 }
   258 
   131 
   259 
       
   260 ////////////////////////////////////////////////////////////////////////////////////////////
       
   261 // handle search panel event
       
   262 
       
   263 void HelpCategoryView::onSearchPanelExitClicked()
       
   264 {
       
   265 	if(mListSearch->model()->rowCount() == 0)
       
   266 	{
       
   267 		mBuilder.load(QRC_DOCML_CATEGORY, DOCML_LAYOUT_CATEGORY_SEARCH_NO_SRHPAL_NO_MATCH);
       
   268 	}
       
   269 	else
       
   270 	{
       
   271 		mBuilder.load(QRC_DOCML_CATEGORY, DOCML_LAYOUT_CATEGORY_SEARCH_NO_SRHPAL);
       
   272 	}
       
   273 	toolBar()->show();
       
   274 }
       
   275 
       
   276 void HelpCategoryView::onSearchPanelCriteriaChanged(const QString &criteria)
       
   277 {
       
   278     HelpDataProvider::instance()->getSearchData(criteria);
       
   279 	if(mListSearch->model()->rowCount() == 0)
       
   280 	{
       
   281 		mBuilder.load(QRC_DOCML_CATEGORY, DOCML_LAYOUT_CATEGORY_SEARCH_NO_MATCH);
       
   282 	}
       
   283 	else
       
   284 	{
       
   285 		mBuilder.load(QRC_DOCML_CATEGORY, DOCML_LAYOUT_CATEGORY_SEARCH);
       
   286 	}
       
   287 
       
   288 	toolBar()->hide();
       
   289 
       
   290 	if(criteria.isEmpty())
       
   291 	{
       
   292 		groupBox()->setHeading(hbTrId(TXT_SETLABEL_SEARCH));
       
   293 	}
       
   294 	else
       
   295 	{
       
   296 		QString heading = qtTrId(TXT_SETLABEL_SEARCH_RESULTS);
       
   297 		heading.append(COLON);
       
   298 		heading.append(criteria);
       
   299 		groupBox()->setHeading(heading);
       
   300 	}
       
   301 }
       
   302 
       
   303 ////////////////////////////////////////////////////////////////////////////////////////////
       
   304 // handle virtual keyboard event
       
   305 
       
   306 void HelpCategoryView::onHandleKeypadOpen()
       
   307 {
       
   308 	updateVisibleItems(false);
       
   309     qreal heightToSet = mainWindow()->layoutRect().height() - mVirtualKeyboard->keyboardArea().height();
       
   310     this->setMaximumHeight(heightToSet);
       
   311 }
       
   312 
       
   313 void HelpCategoryView::onHandleKeypadClose()
       
   314 {	
       
   315 	updateVisibleItems(true);
       
   316 	qreal mainHeight  = mainWindow()->layoutRect().height();
       
   317 	qreal toolbarHeight = toolBar()->size().height();
       
   318 	qreal height = mainHeight - (toolBar()->isVisible() ? toolbarHeight : 0);
       
   319 	this->setMaximumHeight(height);
       
   320 }
       
   321 
       
   322 ////////////////////////////////////////////////////////////////////////////////////////////
       
   323 // handle menu event
       
   324 void HelpCategoryView::onExpandAll()
       
   325 {
       
   326 	QStandardItemModel* model = (QStandardItemModel*)(mListAll->model());
       
   327 	expandCollapseAllList(model->invisibleRootItem(),true);
       
   328 }
       
   329 
       
   330 void HelpCategoryView::onCollapseAll()
       
   331 {
       
   332 	QStandardItemModel* model = (QStandardItemModel*)(mListAll->model());
       
   333 	expandCollapseAllList(model->invisibleRootItem(),false);
       
   334 }
       
   335 
       
   336 
       
   337 // end of file
   132 // end of file