appfw/viewserver/test/tviews/tview4/tview4.cpp
changeset 0 2e3d3ce01487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appfw/viewserver/test/tviews/tview4/tview4.cpp	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,602 @@
+// Copyright (c) 2008-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:
+//
+
+/**
+ @file 
+ @internalComponent - Internal Symbian test code 
+*/
+
+
+#include <barsread.h>
+#include <s32file.h>
+#include <gdi.h>
+#include <gulutil.h>
+#include <gulicon.h>
+#include <apgaplst.h>
+#include <apgicnfl.h>
+#include <apgcli.h>
+#include <vwsdef.h>
+
+#include <eikenv.h>
+#include <techview/eikdialg.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <eikpanic.h>
+#include <techview/eikhlbx.h>
+#include <techview/eikhlbm.h>
+#include <techview/eikhlbi.h>
+#include <techview/eiktxlbx.h>
+#include <techview/eiktxlbm.h>
+#include <techview/eikon.hrh>
+#include <techview/eikon.rsg>
+#include <eikon.mbg>
+#include <eikstart.h>
+
+#include "tview4.hrh"
+#include <tview4.rsg>
+
+
+/** Tests reading of views on system at runtime. Installed apps are shown in hierarchical list.
+    Expanding the list item for an app reveals its views. Toolbar allows link to the view to be
+    followed.
+*/
+
+//
+// global functions
+//
+
+GLDEF_C void Panic(TEikPanic aPanic)
+	{
+	User::Panic(_L("TVIEW4"), aPanic);
+	}
+
+//
+// class COwnedFilesDialog
+//
+
+class COwnedFilesDialog : public CEikDialog
+	{
+public:
+	COwnedFilesDialog(TUid aAppUid);
+private: // framework
+	void PreLayoutDynInitL();
+private:
+	TUid iAppUid;
+	};
+
+COwnedFilesDialog::COwnedFilesDialog(TUid aAppUid)
+	: iAppUid(aAppUid) 
+	{
+	}
+
+void COwnedFilesDialog::PreLayoutDynInitL()
+	{
+	CEikTextListBox* listBox = static_cast<CEikTextListBox*>(Control(EAppDlgOwnedFilesId));
+	CEikScrollBarFrame* sbFrame = listBox->CreateScrollBarFrameL();
+	sbFrame->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+	
+	RApaLsSession ls;
+	CleanupClosePushL(ls);
+	User::LeaveIfError(ls.Connect());
+	User::LeaveIfError(ls.GetAllApps());
+
+	CDesCArray* ownedFileArray=new(ELeave) CDesCArraySeg(2);
+	User::LeaveIfError(ls.GetAppOwnedFiles(*ownedFileArray,iAppUid));
+	
+	CleanupStack::PopAndDestroy();	// ls
+	
+	listBox->Model()->SetItemTextArray(ownedFileArray);
+	}
+
+//
+// class CAppAndViewListItem
+//
+
+class CAppAndViewListItem : public CHierListItem
+	{
+public:
+	CAppAndViewListItem(TInt16 aFlags);
+	~CAppAndViewListItem();
+	void SetIcon(CGulIcon* aIcon);
+	CGulIcon* Icon() const;
+	void SetAppUid(TUid aUid);
+	TUid AppUid() const;
+	void SetViewUid(TUid aUid);
+	TUid ViewUid() const;
+private:
+	CGulIcon* iIcon;
+	TUid iAppUid;
+	TUid iViewUid;
+	};
+
+CAppAndViewListItem::CAppAndViewListItem(TInt16 aFlags)
+	: CHierListItem(aFlags),
+	iAppUid(KNullUid), iViewUid(KNullUid)
+	{
+	}
+
+CAppAndViewListItem::~CAppAndViewListItem()
+	{
+	delete iIcon;
+	}
+
+void CAppAndViewListItem::SetIcon(CGulIcon* aIcon)
+	{
+	iIcon=aIcon;
+	}
+
+CGulIcon* CAppAndViewListItem::Icon() const
+	{
+	return iIcon;
+	}
+
+void CAppAndViewListItem::SetAppUid(TUid aUid)
+	{
+	iAppUid=aUid;
+	}
+
+TUid CAppAndViewListItem::AppUid() const
+	{
+	return iAppUid;
+	}
+
+void CAppAndViewListItem::SetViewUid(TUid aUid)
+	{
+	iViewUid=aUid;
+	}
+
+TUid CAppAndViewListItem::ViewUid() const
+	{
+	return iViewUid;
+	}
+
+
+//
+// class CAppAndViewListBoxModel
+//
+
+class CAppAndViewListBoxModel : public CHierarchicalListBoxModel
+	{
+public:
+	CAppAndViewListBoxModel();
+	~CAppAndViewListBoxModel();
+	void CreateListL();
+	void ExpandItemL(TInt aNodeToBeExpanded);
+	void UpdateL();
+	CAppAndViewListItem* AppAndViewItem(TInt aIndex) const;
+	TInt ItemIconHeight() const;
+private:
+	TInt iItemIconHeight;
+	};
+
+CAppAndViewListBoxModel::CAppAndViewListBoxModel()
+	{
+	}
+
+TInt CAppAndViewListBoxModel::ItemIconHeight() const
+	{
+	return iItemIconHeight;
+	}
+
+CAppAndViewListItem* CAppAndViewListBoxModel::AppAndViewItem(TInt aIndex) const
+	{
+	return STATIC_CAST(CAppAndViewListItem*,Item(aIndex));
+	}
+
+void CAppAndViewListBoxModel::CreateListL()
+	{
+	RApaLsSession ls;
+	CleanupClosePushL(ls);
+	User::LeaveIfError(ls.Connect());
+
+	if (!iHierListArray)
+		iHierListArray=new(ELeave) CArrayFixSeg<CHierListItem*>(5);
+	else
+		RemoveAllItems();
+
+	User::LeaveIfError(ls.GetAllApps());
+	TApaAppInfo info;
+	TInt ret=ls.GetNextApp(info);
+	TInt itemIndex=-1;
+
+	CApaMaskedBitmap* appBitmap=CApaMaskedBitmap::NewLC();
+	CAppAndViewListItem* item=NULL;
+	CGulIcon* icon=NULL;
+
+	while (ret==KErrNone)
+		{
+		item=new(ELeave) CAppAndViewListItem((TInt16)0);
+		CleanupStack::PushL(item);
+
+		ls.GetAppIcon(info.iUid,0,*appBitmap);
+		icon=CEikonEnv::Static()->CreateIconFromMaskedBitmapL(*appBitmap);
+		item->SetIcon(icon);
+		item->SetTextL(info.iCaption);
+		item->SetAppUid(info.iUid);
+		AddItemL(item,-1,itemIndex++);
+		iItemIconHeight=Max(iItemIconHeight,icon->Bitmap()->SizeInPixels().iHeight);
+		CleanupStack::Pop();	// item
+	
+		ret=ls.GetNextApp(info);
+		}
+
+	if (ret!=RApaLsSession::ENoMoreAppsInList && ret!=RApaLsSession::EAppListInvalid)
+		User::Leave(ret);
+
+	CleanupStack::PopAndDestroy(2); // appBitmap, ls
+	}
+
+void CAppAndViewListBoxModel::ExpandItemL(TInt aItemToBeExpanded)
+	{
+	const TInt index=aItemToBeExpanded;
+	CAppAndViewListItem* itemToBeExpanded=AppAndViewItem(index);
+	if (itemToBeExpanded->IsExpanded())
+		return;
+	if (itemToBeExpanded->Level()!=0)
+		return;
+
+	RApaLsSession ls;
+	CleanupClosePushL(ls);
+	User::LeaveIfError(ls.Connect());
+	User::LeaveIfError(ls.GetAllApps());
+
+	CApaAppViewArray* appViews=new(ELeave) CApaAppViewArray(5);
+	CleanupStack::PushL(appViews);
+	TUid appUid(itemToBeExpanded->AppUid());
+	ls.GetAppViews(*appViews, appUid);
+	TInt newItemIndex=index;
+
+	CApaMaskedBitmap* viewBitmap=CApaMaskedBitmap::NewLC();
+	CGulIcon* icon=NULL;
+
+	const TInt count=appViews->Count();
+	for (TInt ii=0; ii<count; ii++)
+		{
+		CAppAndViewListItem* newItem=new(ELeave) CAppAndViewListItem((TInt16)0);
+		CleanupStack::PushL(newItem);
+		const TApaAppViewInfo& viewInfo=(*appViews)[ii];
+		newItem->SetTextL(viewInfo.iViewCaption);
+		newItem->SetViewUid(viewInfo.iUid);
+		newItem->SetAppUid(appUid);
+
+		ls.GetAppViewIcon(itemToBeExpanded->AppUid(),viewInfo.iUid,TSize(24,24),*viewBitmap);
+		icon=CEikonEnv::Static()->CreateIconFromMaskedBitmapL(*viewBitmap);
+		newItem->SetIcon(icon);
+
+		AddItemL(newItem,index,newItemIndex++);
+		CleanupStack::Pop();	// newItem
+		}
+	
+	itemToBeExpanded->SetExpanded();
+	CleanupStack::PopAndDestroy(3);	// ls, appViews, viewBitmap
+	}
+
+void CAppAndViewListBoxModel::UpdateL()
+	{
+	// Update not implemented - requires scanning for application installation which is not needed for this test
+	}
+
+CAppAndViewListBoxModel::~CAppAndViewListBoxModel()
+	{	
+	}
+
+
+
+//
+// class CAppAndViewListItemDrawer
+// 
+
+class CAppAndViewListItemDrawer : public CHierarchicalListItemDrawer
+	{
+public:
+	CAppAndViewListItemDrawer(CAppAndViewListBoxModel* aModel,const CFont* aFont,
+											CArrayPtr<CGulIcon>* aIconArray);
+private: // from CHierarchicalListItemDrawer
+	CGulIcon* ItemIcon(TInt aItemIndex) const;
+	};
+
+CAppAndViewListItemDrawer::CAppAndViewListItemDrawer(CAppAndViewListBoxModel* aModel,
+																  const CFont* aFont,
+																  CArrayPtr<CGulIcon>* aIconArray)
+	: CHierarchicalListItemDrawer(aModel,aFont,aIconArray)
+	{}
+
+CGulIcon* CAppAndViewListItemDrawer::ItemIcon(TInt aItemIndex) const
+	{
+	return STATIC_CAST(CAppAndViewListBoxModel*,iModel)->AppAndViewItem(aItemIndex)->Icon();
+	}
+
+
+//
+// class CAppAndViewListBox
+//
+
+
+class CAppAndViewListBox : public CEikHierarchicalListBox, public MHierarchicalListExpansionObserver
+	{
+public:
+    CAppAndViewListBox();
+    ~CAppAndViewListBox();
+	void ConstructL(const CCoeControl* aParent,TInt aFlags);
+	void CreateListL();
+	void UpdateL();
+	CAppAndViewListBoxModel* AppAndViewModel() const;
+public: // from MHierExpansionObserver
+	void UpdateHierarchyL(TInt aItemIndex);
+private:
+	void BaseConstructL();
+	};
+
+
+CAppAndViewListBox::CAppAndViewListBox()
+    {
+    }
+
+CAppAndViewListBox::~CAppAndViewListBox()
+    {
+    }
+
+void CAppAndViewListBox::ConstructL(const CCoeControl* aParent,TInt aFlags)
+	{
+	aFlags&=~EIncrementalMatching; // don't want incremental matching
+	iListBoxFlags=aFlags;
+	BaseConstructL();
+	AppAndViewModel()->ConstructL();
+	CEikListBox::ConstructL(aParent,aFlags);
+	AppAndViewModel()->SetExpansionObserver(this);
+	}
+
+void CAppAndViewListBox::BaseConstructL()
+	{
+	iModel=new(ELeave) CAppAndViewListBoxModel();
+	iItemDrawer=new(ELeave) CAppAndViewListItemDrawer((CAppAndViewListBoxModel*)iModel,iEikonEnv->NormalFont(),NULL);
+	}
+
+void CAppAndViewListBox::UpdateL()
+	{
+	AppAndViewModel()->UpdateL();
+	View()->CalcBottomItemIndex();
+	if (AppAndViewModel()->NumberOfItems()>0)
+		SetCurrentItemIndex(0);
+	UpdateScrollBarsL();
+	}
+
+void CAppAndViewListBox::UpdateHierarchyL(TInt aItemIndex)
+	{
+	if (View()->ItemIsVisible(aItemIndex))
+		{
+		View()->CalcDataWidth();
+		View()->CalcBottomItemIndex();
+		DrawNow();
+		}
+	UpdateScrollBarsL();
+	}
+
+CAppAndViewListBoxModel* CAppAndViewListBox::AppAndViewModel() const
+	{
+	return (CAppAndViewListBoxModel*)iModel;
+	}           
+
+void CAppAndViewListBox::CreateListL()
+	{
+	Reset();
+	CAppAndViewListBoxModel* model=AppAndViewModel();
+	model->CreateListL();
+	SetItemHeightL(Max(ItemHeight(),model->ItemIconHeight()+2));
+	iView->CalcBottomItemIndex();
+	}
+
+
+//
+//	CInstalledViewListContainer
+//
+
+class CInstalledViewListContainer : public CCoeControl
+    {
+public:
+	CInstalledViewListContainer();
+    void ConstructL(const TRect& aRect);
+	~CInstalledViewListContainer();
+	void ListOwnedFilesL();
+private: // from CCoeControl
+	void Draw(const TRect& aRect) const;
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+	TInt CountComponentControls() const;
+	CCoeControl* ComponentControl(TInt aIndex) const;
+private:
+	CAppAndViewListBox* iAppAndViewListBox;
+    };
+
+CInstalledViewListContainer::~CInstalledViewListContainer()
+	{
+	delete iAppAndViewListBox;
+	}
+
+CInstalledViewListContainer::CInstalledViewListContainer()
+	{}
+
+TInt CInstalledViewListContainer::CountComponentControls() const
+    {
+    return 1;
+    }
+
+CCoeControl* CInstalledViewListContainer::ComponentControl(TInt /*aIndex*/) const
+    {			 
+	return iAppAndViewListBox;
+    }
+
+const TInt KXStart = 20;
+const TInt KYStart = 10;
+//const TInt KXSpacing = 5;
+//const TInt KYSpacing = 10;
+//const TInt KControlWidth = 180;
+
+void CInstalledViewListContainer::ConstructL(const TRect& aRect)
+    {
+    CreateWindowL();
+    Window().SetShadowDisabled(ETrue);
+	Window().SetPointerGrab(ETrue);
+    SetRect(aRect);
+
+	TInt yPos = KYStart;
+	TInt xPos = KXStart;
+
+	iAppAndViewListBox = new(ELeave) CAppAndViewListBox;
+	iAppAndViewListBox->ConstructL(this,0);
+	iAppAndViewListBox->CreateScrollBarFrameL();
+	iAppAndViewListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+	iAppAndViewListBox->SetExtent(TPoint(xPos, yPos), TSize(Size().iWidth-(2*xPos), Size().iHeight-(2*yPos)));
+	iAppAndViewListBox->CreateListL();
+	iAppAndViewListBox->HandleItemAdditionL();
+	iAppAndViewListBox->SetFocus(ETrue);
+
+	ActivateL();
+    }
+
+void CInstalledViewListContainer::Draw(const TRect& /*aRect*/) const
+	{
+	CWindowGc& gc = SystemGc();
+	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	gc.SetBrushColor(iEikonEnv->ControlColor(EColorControlSurroundBackground,*this));
+	gc.DrawRect(Rect());
+	}
+
+TKeyResponse CInstalledViewListContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+	{
+	return iAppAndViewListBox->OfferKeyEventL(aKeyEvent, aType);
+	}
+
+void CInstalledViewListContainer::ListOwnedFilesL()
+	{
+
+	CAppAndViewListItem* item=iAppAndViewListBox->AppAndViewModel()->AppAndViewItem(iAppAndViewListBox->CurrentItemIndex());
+	CEikDialog* dialog = new(ELeave) COwnedFilesDialog(item->AppUid());
+	dialog->ExecuteLD(R_TVIEW4_OWNED_FILE_DLG);
+	}
+
+
+//
+// class CTestAppUi
+//
+
+class CTestAppUi : public CEikAppUi
+    {
+public:
+	CTestAppUi();
+    void ConstructL();
+    ~CTestAppUi();
+private: // framework
+    void HandleCommandL(TInt aCommand);
+private:
+	CInstalledViewListContainer* iListContainer;
+    };
+
+
+CTestAppUi::~CTestAppUi()
+    {
+	RemoveFromStack(iListContainer);
+	delete iListContainer;
+    }
+
+CTestAppUi::CTestAppUi()
+    {
+	delete iListContainer;
+    }
+
+void CTestAppUi::ConstructL()
+    {
+    BaseConstructL();
+
+	iListContainer=new(ELeave) CInstalledViewListContainer;
+    iListContainer->ConstructL(ClientRect());
+	AddToStackL(iListContainer);
+    }
+
+void CTestAppUi::HandleCommandL(TInt aCommand)
+    {
+    switch (aCommand)
+        {
+	case EAppCmdListOwnedFiles:
+		iListContainer->ListOwnedFilesL();
+		break;
+    case EEikCmdExit:
+        Exit();
+        break;
+	default:
+		break;
+        }
+    }
+
+
+//
+// CTestDocument
+//
+
+class CTestDocument : public CEikDocument
+	{
+public:
+	CTestDocument(CEikApplication& aApp): CEikDocument(aApp) { }
+private: // from CApaDocument
+	CEikAppUi* CreateAppUiL();
+	};
+
+CEikAppUi* CTestDocument::CreateAppUiL()
+	{
+    return(new(ELeave) CTestAppUi);
+	}
+
+//
+// CTestApplication
+//
+
+class CTestApplication : public CEikApplication
+	{
+private: // from CApaApplication
+	CApaDocument* CreateDocumentL();
+	TUid AppDllUid() const;
+private:
+	CApaDocument* CreateDocumentL(CApaProcess* a) { return CEikApplication::CreateDocumentL(a); }
+	};
+
+const TUid KUidTestApp={0x10207F70};
+
+TUid CTestApplication::AppDllUid() const
+	{
+	return(KUidTestApp);
+	}
+
+CApaDocument* CTestApplication::CreateDocumentL()
+	{
+	return(new(ELeave) CTestDocument(*this));
+	}
+
+//
+// EXPORTed functions
+//
+
+
+	LOCAL_C CApaApplication* NewApplication()
+		{
+		return new CTestApplication;
+		}
+
+	GLDEF_C TInt E32Main()
+		{
+		return EikStart::RunApplication(NewApplication);
+		}
+
+
+