hgcacheproxymodel/tsrc/fute/HgCacheProxyModelTestApp/src/mywindow.cpp
author William Roberts <williamr@symbian.org>
Fri, 11 Jun 2010 16:25:05 +0100
branchGCC_SURGE
changeset 4 463f1934e292
parent 2 49c70dcc3f17
child 3 c863538fcbb6
permissions -rw-r--r--
Branch for GCC_SURGE fixes

/*
* 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:
*
*  Version     : %version: 1 %
*/
#include "mywindow.h"
#include <hbmenu.h>
#include <hbaction.h>
#include <hbmainwindow.h>
#include <hbslider.h>
#include <QTimer>
#include <QtGui>
#include <QDebug>
#include <QPushButton>
#include <QApplication>
#include <QGraphicsLinearLayout>
#include <QCoreApplication>
#include <hbgridview.h>
#include <hbinstance.h>
#include <QFileSystemWatcher>
#include <hgwidgets/hgcacheproxymodel.h>

#include "mydataprovider.h"
#include "hglogger.h"


const QStringList KViewNames = (QStringList() << "GridView" << "ListView" );

MyWindow::MyWindow()
    : HbMainWindow(), 
    mView(0),
    mModel(0),
    mMyDataProvider(0),
    mTimer(new QTimer(this))
{
    mMainView = new HbView();
    addView( mMainView );

    mMainView->setMenu( createMainMenu() ); 
    
    mMyDataProvider = new MyDataProvider(this);
    mModel = new HgCacheProxyModel(this);
    mModel->setDataProvider(mMyDataProvider, 120, 20);

    connect(mTimer, SIGNAL(timeout()), this, SLOT(timeout()));
    
    HbAction action;
	action.setData ( QVariant(1) );	//select Grid
	processAction(&action);
}

MyWindow::~MyWindow()
{
//	delete mMyDataProvider;
}

HbMenu *MyWindow::createMainMenu()
{
    HbMenu* mainMenu = new HbMenu( );
    connect(mainMenu, SIGNAL(triggered(HbAction*)),this, SLOT(processAction(HbAction*)));

    HbMenu *viewSubMenu = mainMenu->addMenu("Change view");
    QString temporaryString;
    int i(0);
    foreach (temporaryString , KViewNames) {
        HbAction* subAction = viewSubMenu->addAction(temporaryString);
        subAction->setData (QVariant(++i));
    }
    
    HbMenu *sortSubMenu = mainMenu->addMenu("Sort");
    HbAction* action = sortSubMenu->addAction("Sort1");
    action->setData(QVariant(101));
    action = sortSubMenu->addAction("Sort2");
    action->setData(QVariant(102));    
    action = sortSubMenu->addAction("Sort3");
    action->setData(QVariant(103));
    HbMenu *sort4SubMenu = sortSubMenu->addMenu("Sort4 (String)");
    action = sort4SubMenu->addAction("CaseSensitive");
    action->setData(QVariant(104));
    action = sort4SubMenu->addAction("CaseInsensitive");
    action->setData(QVariant(105));
    
    HbMenu *filterSubMenu = mainMenu->addMenu("Filter");
    action = filterSubMenu->addAction("Disable filter");
    action->setData(QVariant(201));
    action = filterSubMenu->addAction("Filter ITEM* (Case Sensitive)");
    action->setData(QVariant(202));
    action = filterSubMenu->addAction("Filter ITEM1*(Case Insensitive)");
    action->setData(QVariant(203));
    
    action = mainMenu->addAction("Reset");
    action->setData(QVariant(1000));
    action = mainMenu->addAction("Enable dynamic Sort/Filter");
    action->setData(QVariant(1001));    

    action = mainMenu->addAction("Test");
    action->setData(QVariant(1002));

    action = mainMenu->addAction("Stop Test");
    action->setData(QVariant(1003));
    
    return mainMenu;
}


void MyWindow::processAction( HbAction* action )
{
    int command = action->data().toInt();
    if ( command == 1) {
        HbGridView* view = new HbGridView();
		if ( orientation() == Qt::Horizontal ) {
			view->setColumnCount( 5 );
			view->setRowCount( 3 );
		}else {
			view->setColumnCount( 3 );
			view->setRowCount( 5 );			
		}
//        view->setTextVisible(false);
		view->setUniformItemSizes( true );
		view->setItemRecycling( true );
		//this could be done to change mode, for images it doesn't make sence, becouse images thumbnails are created by default only for medium and fullsize
//		AbstractDataProvider *data = mModel->DataProvider();
//		MyDataProvider *prov = static_cast<MyDataProvider*>(data); //of course we have already poiter to that - mMyDataProvider, but it is example how to get it from model
//		prov->changeIconSize(ThumbnailManager::ThumbnailMedium);
		view->setModel(mModel);
		mMainView->setWidget( view );
        mView = view;
    } else if (command == 2) {
        HbListView* view = new HbListView();
		view->setUniformItemSizes( true );
		view->setItemRecycling( true );
		//this could be done to change mode, for images it doesn't make sence, becouse images thumbnails are created by default only for medium and fullsize
//		AbstractDataProvider *data = mModel->DataProvider();
//		MyDataProvider *prov = static_cast<MyDataProvider*>(data); //of course we have already poiter to that - mMyDataProvider, but it is example how to get it from model
//		prov->changeIconSize(ThumbnailManager::ThumbnailSmall);
		view->setModel(mModel);
		mMainView->setWidget( view );
        mView = view;
	} else if (command == 101) { //sort by KSort1Role
        mModel->setSortRole(Qt::UserRole+2);
        mModel->sort(0);
	} else if (command == 102) { //sort by KSort2Role
        mModel->setSortRole(Qt::UserRole+3);
        mModel->sort(0);
    } else if (command == 103) { //sort by KSort3Role
        mModel->setSortRole(Qt::UserRole+4);
        mModel->sort(0);
    } else if (command == 104) { //sort by DisplayRole CaseSensitive
        mModel->setSortRole(Qt::DisplayRole);
        mModel->setSortCaseSensitivity(Qt::CaseSensitive);  
        mModel->sort(0);
    } else if (command == 105) { //sort by DisplayRole CaseInsensitive
        mModel->setSortRole(Qt::DisplayRole);
        mModel->setSortCaseSensitivity(Qt::CaseInsensitive);
        mModel->sort(0);
    } else if (command == 201) { //disable filter
        QRegExp reg = QRegExp();
        mModel->setFilterRegExp(reg);
    } else if (command == 202) { //Filter ITEM* (Case Sensitive)
        QRegExp reg = QRegExp("ITEM*", Qt::CaseSensitive, QRegExp::Wildcard);
        mModel->setFilterCaseSensitivity(Qt::CaseSensitive);
        mModel->setFilterRegExp(reg);        
    } else if (command == 203) { //Filter ITEM1*(Case Insensitive)
        QRegExp reg = QRegExp("ITEM1*", Qt::CaseInsensitive, QRegExp::Wildcard);
        mModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
        mModel->setFilterRegExp(reg);
    } else if (command == 1000) { //reset
        mMyDataProvider->resetModel();
    } else if (command == 1001) { //reset
        bool current = !mModel->dynamicSortFilter();
        mModel->setDynamicSortFilter(current);
        if (current){
            action->setText("Disable dynamic Sort/Filter");
        }else{
            action->setText("Enable dynamic Sort/Filter");            
        }
    } else if (command == 1002) {
        mTestVal = 500;
        timeout();
    } else if (command == 1003) {
        mTestVal = -1;
    }
}

void MyWindow::setIndex(int /*index*/)
{
    update();
}

void MyWindow::timeout()
{   
    HbAction action;
    action.setData ( QVariant(101 + mTestVal%4) );
    processAction(&action);

    
    if (mTestVal>=0){
        mTestVal--;
        if (mTestVal==0){
            mTestVal = 500;
        }
        mTimer->start(2000);
    }
}

//eof