initial release
authortahirm@symbian.org
Fri, 24 Jul 2009 08:46:02 +0100
changeset 0 0049171ecffb
child 1 7c64bff801d1
initial release
.cproject
.project
Releases/Series3thEdition/13_07_09/NPR.SIS
Releases/Series3thEdition/13_07_09/NPR.SISX
Releases/Series3thEdition/14_07_09/NPR.sis
Releases/Series3thEdition/14_07_09/npr.sisx
Releases/Series3thEdition/15_07_09/NPR__armv5.sis
Releases/Series3thEdition/15_07_09/NPR_armv5.sisx
Releases/Series5thEdtion/15_07_09/npr.sis
Releases/Series5thEdtion/15_07_09/npr.sisx
data/NPR.rls
data/NPR.rss
data/NPR_reg.rss
data/npr_news_stream.rm
data/npr_station_stream.rm
gfx/npr_symbian_generic.bmp
gfx/npr_symbian_generic_mask.bmp
gfx/qgn_menu_NPR.svg
group/Icons_scalable_dc.mk
group/NPR.mmp
group/bld.inf
help/Custom.xml
help/NPR.cshlp
help/NPR.xml
help/NPR_0xEEB0E481.hlp
help/NPR_0xEEB0E481.hlp.hrh
help/build_help.mk
help/temp/NPR_0xEEB0E481.cshlp.xml
inc/HttpClient.h
inc/NPR.hrh
inc/NPR.pan
inc/NPRAppEngine.h
inc/NPRAppUi.h
inc/NPRAppView.h
inc/NPRApplication.h
inc/NPRBrowserAknView.h
inc/NPRBrowserContainer.h
inc/NPRDocument.h
inc/NPRHtmlCreator.h
inc/NPRListBox.h
inc/NPRListBoxView.h
inc/NPRSearchStationListBox.h
inc/NPRSearchStationListBoxView.h
inc/NPRStation.h
inc/NPRStationListBox.h
inc/NPRStationListBoxView.h
inc/NPRStationXmlParser.h
inc/NPRStory.h
inc/NPRStoryListBox.h
inc/NPRStoryListBoxView.h
inc/NPRStoryXmlParser.h
sis/NPR_S60_3_X_v_1_0_0.pkg
sis/NPR_S60_3_X_v_1_0_0.sis
sis/NPR_S60_3_X_v_1_0_0.sisx
sis/backup_registration.xml
src/HttpClient.cpp
src/NPR.cpp
src/NPRAppEngine.cpp
src/NPRAppUi.cpp
src/NPRAppView.cpp
src/NPRApplication.cpp
src/NPRBrowserAknView.cpp
src/NPRBrowserContainer.cpp
src/NPRDocument.cpp
src/NPRHtmlCreator.cpp
src/NPRListBox.cpp
src/NPRListBoxView.cpp
src/NPRSearchStationListBox.cpp
src/NPRSearchStationListBoxView.cpp
src/NPRStation.cpp
src/NPRStationListBox.cpp
src/NPRStationListBoxView.cpp
src/NPRStationXmlParser.cpp
src/NPRStory.cpp
src/NPRStoryListBox.cpp
src/NPRStoryListBoxView.cpp
src/NPRStoryXmlParser.cpp
testData/pic1.jpg
testData/pic2.jpg
testData/pic3.jpg
testData/pic4.jpg
testData/pic5.jpg
testData/pic6.jpg
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.cproject	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,409 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?fileVersion 4.0.0?>
+
+<cproject>
+<storageModule buildFromInf="true" buildingTestComps="true" cleanLevel="0" concurrentBuildJobs="4" defaultMMPChangedAction="0" infBuildComponents="" infFileLocation="group\bld.inf" macrosFile="" makeEngineToUse="make" manageDependencies="true" moduleId="com.nokia.carbide.cdt.builder.carbideCPPBuilder" overrideMakeEngine="false" overrideWorkspaceSettings="false" promptForMMPChangedAction="true" useConcurrentBuilding="true" useDebugMode="false" useIncrementalBuilder="false" useKeepGoing="false" useMMPMacros="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.settings">
+<cconfiguration id="Emulator Debug (WINSCW) [S60_5th_Edition_SDK_v1.0]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Emulator Debug (WINSCW) [S60_5th_Edition_SDK_v1.0]" moduleId="org.eclipse.cdt.core.settings" name="Emulator Debug (WINSCW) [S60_5th_Edition_SDK_v1.0]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MWLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MWCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/S60/devices/S60_5th_Edition_SDK_v1.0/epoc32/include;" macrosCache="__S60_50__;__EXE__;__WINSCW__;__SUPPORT_CPP_EXCEPTIONS__;__SYMBIAN32__;__S60_3X__;_UNICODE;__S60_5X__;__SERIES60_3X__;_DEBUG;__WINS__;__CW32__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741000" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+</cconfiguration>
+<cconfiguration id="Phone Debug (ARMV5) [S60_5th_Edition_SDK_v1.0]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Phone Debug (ARMV5) [S60_5th_Edition_SDK_v1.0]" moduleId="org.eclipse.cdt.core.settings" name="Phone Debug (ARMV5) [S60_5th_Edition_SDK_v1.0]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RVCTCompilerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RVCTLinkerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.Elf2E32ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/S60/devices/S60_5th_Edition_SDK_v1.0/epoc32/include;" macrosCache="__GENERIC_MARM__;__EXE__;__SYMBIAN32__;__SUPPORT_CPP_EXCEPTIONS__;__EPOC32__;__EABI__;__ARMCC_2__;__ARMCC__;__MARM__;__S60_50__;__S60_3X__;__ARMCC_2_2__;_UNICODE;__S60_5X__;_DEBUG;__SERIES60_3X__;__MARM_ARMV5__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741031" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+</cconfiguration>
+<cconfiguration id="Phone Release (ARMV5) [S60_5th_Edition_SDK_v1.0]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Phone Release (ARMV5) [S60_5th_Edition_SDK_v1.0]" moduleId="org.eclipse.cdt.core.settings" name="Phone Release (ARMV5) [S60_5th_Edition_SDK_v1.0]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RVCTCompilerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RVCTLinkerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.Elf2E32ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/S60/devices/S60_5th_Edition_SDK_v1.0/epoc32/include;" macrosCache="__GENERIC_MARM__;__EXE__;__SYMBIAN32__;__SUPPORT_CPP_EXCEPTIONS__;__EPOC32__;__EABI__;__ARMCC_2__;NDEBUG;__ARMCC__;__MARM__;__S60_50__;__S60_3X__;__ARMCC_2_2__;_UNICODE;__S60_5X__;__SERIES60_3X__;__MARM_ARMV5__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741046" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+</cconfiguration>
+<cconfiguration id="Phone Debug (GCCE) [S60_5th_Edition_SDK_v1.0]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Phone Debug (GCCE) [S60_5th_Edition_SDK_v1.0]" moduleId="org.eclipse.cdt.core.settings" name="Phone Debug (GCCE) [S60_5th_Edition_SDK_v1.0]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.GCCEErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.Elf2E32ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/S60/devices/S60_5th_Edition_SDK_v1.0/epoc32/include;" macrosCache="__GENERIC_MARM__;__EXE__;__SYMBIAN32__;__SUPPORT_CPP_EXCEPTIONS__;__EPOC32__;__EABI__;__GCCE__;__MARM__;__S60_50__;_UNICODE;__S60_3X__;__S60_5X__;_DEBUG;__SERIES60_3X__;__MARM_ARMV5__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741062" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+</cconfiguration>
+<cconfiguration id="Phone Release (GCCE) [S60_5th_Edition_SDK_v1.0]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Phone Release (GCCE) [S60_5th_Edition_SDK_v1.0]" moduleId="org.eclipse.cdt.core.settings" name="Phone Release (GCCE) [S60_5th_Edition_SDK_v1.0]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.GCCEErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.Elf2E32ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<SIS_BUILDER_DATA_ID CERTIFICATESTORAGE="C:\cert\NPR_App.cer" CREATESTUBSTORAGE="false" ENABLEDSTORAGE="true" KEYSTORAGE="C:\cert\JohnsFoundationCert.pfx.key" PARTIALUPGRADESTORAGE="false" PKGFILESTORAGE="C:\workspace\SymbianNPR\trunk\NPR\sis\NPR_S60_3_X_v_1_0_0.pkg" SIGNINGTYPESTORAGE="2"/>
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/S60/devices/S60_5th_Edition_SDK_v1.0/epoc32/include;" macrosCache="__GENERIC_MARM__;__EXE__;__SYMBIAN32__;__SUPPORT_CPP_EXCEPTIONS__;__EPOC32__;__EABI__;__GCCE__;NDEBUG;__MARM__;__S60_50__;_UNICODE;__S60_3X__;__S60_5X__;__SERIES60_3X__;__MARM_ARMV5__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741078" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+</cconfiguration>
+<cconfiguration id="Emulator Debug (WINSCW) [S60_3rd_FP1]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Emulator Debug (WINSCW) [S60_3rd_FP1]" moduleId="org.eclipse.cdt.core.settings" name="Emulator Debug (WINSCW) [S60_3rd_FP1]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MWLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MWCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/Symbian/9.2/S60_3rd_FP1/Epoc32/include;" macrosCache="__EXE__;__WINSCW__;__SUPPORT_CPP_EXCEPTIONS__;__SYMBIAN32__;_UNICODE;__SERIES60_3X__;_DEBUG;__SERIES60_31__;__WINS__;__CW32__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741125" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+</cconfiguration>
+<cconfiguration id="Phone Debug (ARMV5) [S60_3rd_FP1]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Phone Debug (ARMV5) [S60_3rd_FP1]" moduleId="org.eclipse.cdt.core.settings" name="Phone Debug (ARMV5) [S60_3rd_FP1]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RVCTCompilerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RVCTLinkerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.Elf2E32ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/Symbian/9.2/S60_3rd_FP1/Epoc32/include;" macrosCache="__GENERIC_MARM__;__EXE__;__SYMBIAN32__;__SUPPORT_CPP_EXCEPTIONS__;__EPOC32__;__EABI__;__SERIES60_31__;__ARMCC__;__MARM__;__ARMCC_2_2__;_UNICODE;_DEBUG;__SERIES60_3X__;__MARM_ARMV5__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741156" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+</cconfiguration>
+<cconfiguration id="Phone Release (ARMV5) [S60_3rd_FP1]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Phone Release (ARMV5) [S60_3rd_FP1]" moduleId="org.eclipse.cdt.core.settings" name="Phone Release (ARMV5) [S60_3rd_FP1]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RVCTCompilerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RVCTLinkerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.Elf2E32ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/Symbian/9.2/S60_3rd_FP1/Epoc32/include;" macrosCache="__GENERIC_MARM__;__EXE__;__SYMBIAN32__;__SUPPORT_CPP_EXCEPTIONS__;__EPOC32__;__EABI__;NDEBUG;__SERIES60_31__;__ARMCC__;__MARM__;__ARMCC_2_2__;_UNICODE;__SERIES60_3X__;__MARM_ARMV5__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741187" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+</cconfiguration>
+<cconfiguration id="Phone Debug (GCCE) [S60_3rd_FP1]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Phone Debug (GCCE) [S60_3rd_FP1]" moduleId="org.eclipse.cdt.core.settings" name="Phone Debug (GCCE) [S60_3rd_FP1]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.GCCEErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.Elf2E32ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/Symbian/9.2/S60_3rd_FP1/Epoc32/include;" macrosCache="__GENERIC_MARM__;__EXE__;__SYMBIAN32__;__SUPPORT_CPP_EXCEPTIONS__;__EPOC32__;__EABI__;__GCCE__;__SERIES60_31__;__MARM__;_UNICODE;_DEBUG;__SERIES60_3X__;__MARM_ARMV5__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741203" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+</cconfiguration>
+<cconfiguration id="Phone Release (GCCE) [S60_3rd_FP1]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Phone Release (GCCE) [S60_3rd_FP1]" moduleId="org.eclipse.cdt.core.settings" name="Phone Release (GCCE) [S60_3rd_FP1]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.GCCEErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.Elf2E32ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/Symbian/9.2/S60_3rd_FP1/Epoc32/include;" macrosCache="__GENERIC_MARM__;__EXE__;__SYMBIAN32__;__SUPPORT_CPP_EXCEPTIONS__;__EPOC32__;__EABI__;__GCCE__;NDEBUG;__SERIES60_31__;__MARM__;_UNICODE;__SERIES60_3X__;__MARM_ARMV5__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741250" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+</cconfiguration>
+<cconfiguration id="Emulator Debug (WINSCW) [S60_3rd_FP2_SDK_v1.1]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Emulator Debug (WINSCW) [S60_3rd_FP2_SDK_v1.1]" moduleId="org.eclipse.cdt.core.settings" name="Emulator Debug (WINSCW) [S60_3rd_FP2_SDK_v1.1]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MWLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MWCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/S60/devices/S60_3rd_FP2_SDK_v1.1/epoc32/include;" macrosCache="__EXE__;__WINSCW__;__SUPPORT_CPP_EXCEPTIONS__;__SYMBIAN32__;__S60_3X__;_UNICODE;__SERIES60_3X__;_DEBUG;__S60_32__;__WINS__;__CW32__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741281" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+</cconfiguration>
+<cconfiguration id="Phone Debug (ARMV5) [S60_3rd_FP2_SDK_v1.1]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Phone Debug (ARMV5) [S60_3rd_FP2_SDK_v1.1]" moduleId="org.eclipse.cdt.core.settings" name="Phone Debug (ARMV5) [S60_3rd_FP2_SDK_v1.1]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RVCTCompilerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RVCTLinkerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.Elf2E32ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/S60/devices/S60_3rd_FP2_SDK_v1.1/epoc32/include;" macrosCache="__GENERIC_MARM__;__EXE__;__SYMBIAN32__;__SUPPORT_CPP_EXCEPTIONS__;__EPOC32__;__EABI__;__ARMCC__;__MARM__;__S60_3X__;__ARMCC_2_2__;_UNICODE;_DEBUG;__SERIES60_3X__;__MARM_ARMV5__;__S60_32__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741296" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+</cconfiguration>
+<cconfiguration id="Phone Release (ARMV5) [S60_3rd_FP2_SDK_v1.1]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Phone Release (ARMV5) [S60_3rd_FP2_SDK_v1.1]" moduleId="org.eclipse.cdt.core.settings" name="Phone Release (ARMV5) [S60_3rd_FP2_SDK_v1.1]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RVCTCompilerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RVCTLinkerErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.Elf2E32ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/S60/devices/S60_3rd_FP2_SDK_v1.1/epoc32/include;" macrosCache="__GENERIC_MARM__;__EXE__;__SYMBIAN32__;__SUPPORT_CPP_EXCEPTIONS__;__EPOC32__;__EABI__;NDEBUG;__ARMCC__;__MARM__;__S60_3X__;__ARMCC_2_2__;_UNICODE;__SERIES60_3X__;__MARM_ARMV5__;__S60_32__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741312" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+</cconfiguration>
+<cconfiguration id="Phone Debug (GCCE) [S60_3rd_FP2_SDK_v1.1]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Phone Debug (GCCE) [S60_3rd_FP2_SDK_v1.1]" moduleId="org.eclipse.cdt.core.settings" name="Phone Debug (GCCE) [S60_3rd_FP2_SDK_v1.1]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.GCCEErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.Elf2E32ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/S60/devices/S60_3rd_FP2_SDK_v1.1/epoc32/include;" macrosCache="__GENERIC_MARM__;__EXE__;__SYMBIAN32__;__SUPPORT_CPP_EXCEPTIONS__;__EPOC32__;__EABI__;__GCCE__;__MARM__;_UNICODE;__S60_3X__;_DEBUG;__SERIES60_3X__;__MARM_ARMV5__;__S60_32__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741328" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+</cconfiguration>
+<cconfiguration id="Phone Release (GCCE) [S60_3rd_FP2_SDK_v1.1]">
+<storageModule buildSystemId="com.nokia.carbide.cdt.builder.CarbideConfigurationDataProvider" id="Phone Release (GCCE) [S60_3rd_FP2_SDK_v1.1]" moduleId="org.eclipse.cdt.core.settings" name="Phone Release (GCCE) [S60_3rd_FP2_SDK_v1.1]">
+<externalSettings/>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.cdt.debug.cw.symbian.SymbianE32" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakeDefErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.SBSv2ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.GCCEErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.CarbideMakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.RCOMPErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.Elf2E32ErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="com.nokia.carbide.cdt.builder.MakmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+<storageModule moduleId="CarbideConfigurationDataProvider">
+<SIS_BUILDER_DATA_ID CERTIFICATESTORAGE="C:\cert\NPR_App196.cer" CREATESTUBSTORAGE="false" ENABLEDSTORAGE="true" KEYSTORAGE="C:\cert\JohnsFoundationCert.pfx.key" PARTIALUPGRADESTORAGE="false" PKGFILESTORAGE="C:\workspace\SymbianNPR\trunk\NPR\sis\NPR_S60_3_X_v_1_0_0.pkg" SIGNINGTYPESTORAGE="2"/>
+<ENV_VAR_DATA_ID/>
+<ARGUMENTS_DATA_ID ABLDFREEZEARGSSTORAGE="-r"/>
+<ROM_BUILDER_DATA_ID ROMBUILDWORKINGDIRECTORYSTORAGE="C:\"/>
+</storageModule>
+<storageModule filesCache="C:\workspace\SymbianNPR\trunk\NPR\group\NPR.mmp;C:\workspace\SymbianNPR\trunk\NPR\group\bld.inf;" includesCache="C:/workspace/SymbianNPR/trunk/NPR/inc[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/help[LOCAL];C:/workspace/SymbianNPR/trunk/NPR/data[LOCAL];C:/S60/devices/S60_3rd_FP2_SDK_v1.1/epoc32/include;" macrosCache="__GENERIC_MARM__;__EXE__;__SYMBIAN32__;__SUPPORT_CPP_EXCEPTIONS__;__EPOC32__;__EABI__;__GCCE__;NDEBUG;__MARM__;_UNICODE;__S60_3X__;__SERIES60_3X__;__MARM_ARMV5__;__S60_32__;" moduleId="configDataCache" sourcesCache="/NPR/data;/NPR/help;/NPR/inc;/NPR/src;" timestampCache="1247689741343" useMmpMacrosCache="true"/>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+</cconfiguration>
+</storageModule>
+</cproject>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.project	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>NPR</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.nokia.carbide.cdt.builder.carbideCPPBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+		<nature>org.eclipse.cdt.core.ccnature</nature>
+		<nature>com.nokia.carbide.cdt.builder.carbideCPPBuilderNature</nature>
+	</natures>
+</projectDescription>
Binary file Releases/Series3thEdition/13_07_09/NPR.SIS has changed
Binary file Releases/Series3thEdition/13_07_09/NPR.SISX has changed
Binary file Releases/Series3thEdition/14_07_09/NPR.sis has changed
Binary file Releases/Series3thEdition/14_07_09/npr.sisx has changed
Binary file Releases/Series3thEdition/15_07_09/NPR__armv5.sis has changed
Binary file Releases/Series3thEdition/15_07_09/NPR_armv5.sisx has changed
Binary file Releases/Series5thEdtion/15_07_09/npr.sis has changed
Binary file Releases/Series5thEdtion/15_07_09/npr.sisx has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/NPR.rls	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,51 @@
+/*
+ ============================================================================
+ Name	: NPR.rls
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : This is a localisation file for NPR A .rls file is the one and only place where the logical
+			   strings to be localised are defined. 
+ ============================================================================
+ */
+
+//  LOCALISATION STRINGS
+
+// Caption string for app.
+#define qtn_caption_string "NPR"
+
+// First item in "Options" menu pane
+#define qtn_command1 "Message"
+
+// Second item in "Options" menu pane
+#define qnt_npr_channel "channel"
+
+#define qtn_help "Help"
+
+#define qtn_about "About"
+
+// Third item in "Options" menu pane
+#define qtn_exit "Exit"
+
+// When user requests ECommand1 event, text below is shown.
+#define qtn_command1_text "Hello World!"
+
+#define qtn_loc_resource_file_1 "\\resource\\apps\\NPR_0xEEB0E481"
+
+#define qtn_about_dialog_title "About"
+
+#define qtn_about_dialog_text "NPR Version 1.0.0\n\nAuthor: John Kern\n\nSupport: johnk@symbian.org\n\n(c) This component and the accompanying materials are made available under the terms of the License \"Eclipse Public License v1.0\"  which accompanies this distribution, and is available at the URL \"http://www.eclipse.org/legal/epl-v10.html\"."
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/NPR.rss	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,636 @@
+/*
+ ============================================================================
+ Name	: NPR.rss
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : This file contains all the resources for the NPR
+ ============================================================================
+ */
+
+/*
+============================================================================
+ Name		: NPR.rss
+ Author	  : John Kern
+ Copyright   : This component and the accompanying materials are made available under the terms of the License "Eclipse Public License v1.0"  which accompanies this distribution, and is available at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ Description : This file contains all the resources for the NPR.
+============================================================================
+*/
+//  RESOURCE IDENTIFIER
+NAME NPRX	// 4 letter ID
+
+
+//  INCLUDES
+#include <eikon.rh>
+#include <avkon.rsg>
+#include <avkon.rh>
+#include <appinfo.rh>
+#include "NPR.hrh"
+#include "NPR.rls"
+
+//  RESOURCE DEFINITIONS
+// -----------------------------------------------------------------------------
+//
+//	Define the resource file signature
+//	This resource should be empty.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE
+	{
+	}
+
+// -----------------------------------------------------------------------------
+//
+//	Default Document Name
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE TBUF r_default_document_name
+	{
+	buf="NPRX";
+	}
+
+// -----------------------------------------------------------------------------
+//
+//	Define default menu and CBA key.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE EIK_APP_INFO
+	{
+	menubar = r_menubar;
+	cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
+	}
+
+
+// -----------------------------------------------------------------------------
+//
+//   r_menubar
+//   Main menubar
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_BAR r_menubar
+	{
+	titles =
+		{
+		MENU_TITLE { menu_pane = r_menu; }
+		};
+	}
+
+
+// -----------------------------------------------------------------------------
+//
+//   r_menu
+//   Menu for "Options"
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_menu
+	{
+	items =
+		{
+		// added the new Options menu command here
+		MENU_ITEM
+				{
+				command = ERequestNprCmd;
+				txt = qnt_npr_channel;
+				},
+		MENU_ITEM
+				{
+				command = EAbout;
+				txt = qtn_about;
+				},
+		MENU_ITEM
+				{
+				command = EAknSoftkeyExit;
+				txt = qtn_exit;
+				}
+		};
+	}
+
+// -----------------------------------------------------------------------------
+//
+// About dialog resource.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_about_query_dialog
+	{
+	flags = EGeneralQueryFlags | EEikDialogFlagNoBorder | EEikDialogFlagNoShadow;
+	buttons = R_AVKON_SOFTKEYS_OK_EMPTY;
+	items=
+		{
+		DLG_LINE 
+			{
+			type = EAknCtPopupHeadingPane;
+			id = EAknMessageQueryHeaderId;
+			itemflags = EEikDlgItemNonFocusing;
+			control = AVKON_HEADING
+				{
+				};
+			},
+		DLG_LINE
+			{
+			type = EAknCtMessageQuery;
+			id = EAknMessageQueryContentId;
+			control = AVKON_MESSAGE_QUERY
+				{
+				};
+			}
+		};
+	}
+
+
+// -----------------------------------------------------------------------------
+//
+// Resources for messages.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE TBUF32 r_caption_string { buf=qtn_caption_string; }
+RESOURCE TBUF32 r_about_dialog_title { buf=qtn_about_dialog_title; }
+RESOURCE TBUF r_about_dialog_text { buf=qtn_about_dialog_text; }
+RESOURCE TBUF r_command1_text { buf=qtn_command1_text; }
+
+
+// ---------------------------------------------------------------------------- 
+//
+// r_localisable_app_info
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE LOCALISABLE_APP_INFO r_localisable_app_info
+	{
+	short_caption = qtn_caption_string;
+	caption_and_icon = 
+	CAPTION_AND_ICON_INFO
+		{
+		caption = qtn_caption_string;
+
+		number_of_icons = 1;
+		icon_file = "\\resource\\apps\\NPR_0xEEB0E481.mif";
+		};
+	}
+
+
+/////////////////////////////////////////////////////////////////////
+//Main view
+RESOURCE AVKON_VIEW r_nprlist_box_nprlist_box_view
+	{
+	cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
+	menubar = r_nprlist_box_options_menu;
+	toolbar = 0;
+	}
+RESOURCE MENU_BAR r_nprlist_box_options_menu
+	{
+	titles =
+		{
+		MENU_TITLE { menu_pane = r_nprlist_box_menu; }
+		};
+	}
+
+RESOURCE MENU_PANE r_nprlist_box_menu
+	{
+	items =
+		{
+		// added the new Options menu command here
+		MENU_ITEM
+				{
+				command = ESelect;
+				txt = "Select";
+				}
+		};
+	}
+
+RESOURCE STATUS_PANE_APP_MODEL r_nprlist_box_status_pane
+	{
+	panes =
+		{
+		SPANE_PANE
+			{
+			id = EEikStatusPaneUidTitle;
+			type = EAknCtTitlePane;
+			resource = r_nprlist_box_title_resource;
+			}
+		};
+	}
+
+RESOURCE TITLE_PANE r_nprlist_box_title_resource
+	{
+	txt = "NPR";
+	}
+
+RESOURCE LISTBOX r_nprlist_box_list_box
+	{
+	flags = EAknListBoxSelectionList;
+	}
+
+RESOURCE ARRAY r_nprlist_box_listbox_item1
+	{
+	items =
+		{
+		LBUF
+			{
+			txt = "News";
+			}
+		};
+	}
+
+RESOURCE ARRAY r_nprlist_box_listbox_item2
+	{
+	items =
+		{
+		LBUF
+			{
+			txt = "Stations";
+			}
+		};
+	}
+
+RESOURCE ARRAY r_nprlist_box_listbox_item3
+	{
+	items =
+		{
+		LBUF
+			{
+			txt = "Programs";
+			}
+		};
+	}
+
+RESOURCE ARRAY r_nprlist_box_listbox_item4
+	{
+	items =
+		{
+		LBUF
+			{
+			txt = "Playlists";
+			}
+		};
+	}
+
+RESOURCE ARRAY r_nprlist_box_listbox_item5
+	{
+	items =
+		{
+		LBUF
+			{
+			txt = "Settings";
+			}
+		};
+	}
+
+/////////////////////////////////////////////////////////////////////
+//Story view
+RESOURCE AVKON_VIEW r_nprstory_list_box_nprstory_list_box_view
+	{
+	cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+	menubar = r_nprstory_list_box_options_menu;
+	toolbar = 0;
+	}
+
+RESOURCE MENU_BAR r_nprstory_list_box_options_menu
+	{
+	titles =
+		{
+		MENU_TITLE { menu_pane = r_nprstory_list_box_menu; }
+		};
+	}
+
+RESOURCE MENU_PANE r_nprstory_list_box_menu
+	{
+	items =
+		{
+		// added the new Options menu command here
+		MENU_ITEM
+				{
+				command = ESelect;
+				txt = "Select";
+				}
+		};
+	}
+
+RESOURCE STATUS_PANE_APP_MODEL r_nprstory_list_box_status_pane
+	{
+	panes =
+		{
+		SPANE_PANE
+			{
+			id = EEikStatusPaneUidTitle;
+			type = EAknCtTitlePane;
+			resource = r_nprstory_list_box_title_resource;
+			}
+		};
+	}
+
+RESOURCE TITLE_PANE r_nprstory_list_box_title_resource
+	{
+	txt = "News";
+	}
+
+RESOURCE LISTBOX r_nprstory_list_box_list_box
+	{
+	flags = EAknListBoxSelectionList;
+	}
+
+
+/////////////////////////////////////////////////////////////////////
+//Stations view
+RESOURCE AVKON_VIEW r_nprstation_list_box_nprstation_list_box_view
+	{
+	cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+	menubar = r_nprstation_list_box_options_menu;
+	toolbar = 0;
+	}
+
+RESOURCE MENU_BAR r_nprstation_list_box_options_menu
+	{
+	titles =
+		{
+		MENU_TITLE { menu_pane = r_nprlist_list_box_menu; }
+		};
+	}
+
+RESOURCE MENU_PANE r_nprlist_list_box_menu
+	{
+	items =
+		{
+		// added the new Options menu command here
+		MENU_ITEM
+				{
+				command = EListen;
+				txt = "Listen";
+				}
+		};
+	}
+
+RESOURCE STATUS_PANE_APP_MODEL r_nprstation_list_box_status_pane
+	{
+	panes =
+		{
+		SPANE_PANE
+			{
+			id = EEikStatusPaneUidTitle;
+			type = EAknCtTitlePane;
+			resource = r_nprstation_list_box_title_resource;
+			}
+		};
+	}
+RESOURCE TITLE_PANE r_nprstation_list_box_title_resource
+	{
+	txt = "STATIONS";
+	}
+
+RESOURCE LISTBOX r_nprstation_list_box_list_box
+	{
+	flags = EAknListBoxSelectionList;
+	}
+
+
+/////////////////////////////////////////////////////////////////////
+//Search stations view
+RESOURCE AVKON_VIEW r_nprsearch_station_list_box_nprsearch_station_list_box_view
+	{
+	cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+	menubar = r_nprsearch_station_list_box_options_menu;
+	toolbar = 0;
+	}
+RESOURCE MENU_BAR r_nprsearch_station_list_box_options_menu
+	{
+	titles =
+		{
+		MENU_TITLE { menu_pane = r_nprsearch_station_list_box_menu; }
+		};
+	}
+
+RESOURCE MENU_PANE r_nprsearch_station_list_box_menu
+	{
+	items =
+		{
+		// added the new Options menu command here
+		MENU_ITEM
+				{
+				command = ESelect;
+				txt = "Select";
+				}
+		};
+	}
+
+RESOURCE STATUS_PANE_APP_MODEL r_nprsearch_station_list_box_status_pane
+	{
+	panes =
+		{
+		SPANE_PANE
+			{
+			id = EEikStatusPaneUidTitle;
+			type = EAknCtTitlePane;
+			resource = r_nprsearch_station_list_box_title_resource;
+			}
+		};
+	}
+RESOURCE TITLE_PANE r_nprsearch_station_list_box_title_resource
+	{
+	txt = "Search station";
+	}
+RESOURCE LISTBOX r_nprsearch_station_list_box_list_box
+	{
+	flags = EAknListBoxSelectionList;
+	}
+
+RESOURCE ARRAY r_nprsearch_station_list_box_item1
+	{
+	items =
+		{
+		LBUF
+			{
+			txt = "Search by ZIP code";
+			}
+		};
+	}
+
+RESOURCE ARRAY r_nprsearch_station_list_box_item2
+	{
+	items =
+		{
+		LBUF
+			{
+			txt = "Current Location";
+			}
+		};
+	}
+
+RESOURCE ARRAY r_nprsearch_station_list_box_item3
+	{
+	items =
+		{
+		LBUF
+			{
+			txt = "Search City name";
+			}
+		};
+	}
+
+RESOURCE ARRAY r_nprsearch_station_list_box_item4
+	{
+	items =
+		{
+		LBUF
+			{
+			txt = "Show All";
+			}
+		};
+	}
+
+/////////////////////////////////////////////////////////////////////
+//Query dialog
+RESOURCE DIALOG R_ASK_NAME_DIALOG
+    {
+    flags = EGeneralQueryFlags;
+    buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
+    items=
+        {
+        DLG_LINE
+            {
+            type = EAknCtQuery;
+            id = EGeneralQuery;
+            control= AVKON_DATA_QUERY 
+                { 
+                layout = EDataLayout;
+                control = EDWIN
+                    { 
+                    flags= EEikEdwinNoHorizScrolling | EEikEdwinResizable; 
+                    maxlength = 5; 
+                    width = 4; 
+                    lines = 1;
+                    default_input_mode = EAknEditorNumericInputMode;
+                    };
+                };
+            }
+        };
+    }
+
+////////////////////////////////////////////////////////////////////////
+//waiting dialog
+RESOURCE DIALOG r_singular_wait_note
+	{
+    flags   = EAknWaitNoteFlags;
+    buttons = R_AVKON_SOFTKEYS_EMPTY;
+    items =
+        {
+        DLG_LINE
+            {
+            type    = EAknCtNote;
+            id      = 10;
+            control = AVKON_NOTE
+                {
+                layout         = EWaitLayout;
+                singular_label = "";
+                plural_label   = "";
+                animation      = R_QGN_GRAF_WAIT_BAR_ANIM;
+                };
+            }
+        };
+    }
+
+//////////////////////////////////////////////////////////////////////////
+//Browser view
+RESOURCE AVKON_VIEW r_akn_browser_view
+	{
+	cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+	menubar = r_nprstation_list_box_options_menu;
+	toolbar = 0;
+	}
+
+////////////////////////////////////////////////////////////////
+//Story viewer
+RESOURCE AVKON_VIEW r_nprstory_viewer_container_nprstory_viewer_container_view
+	{
+	cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+	menubar = r_nprstory_viewer_container_options_menu;
+	toolbar = 0;
+	}
+
+RESOURCE MENU_BAR r_nprstory_viewer_container_options_menu
+	{
+	titles =
+		{
+		MENU_TITLE { menu_pane = r_nprstory_viewer_container_menu; }
+		};
+	}
+
+RESOURCE MENU_PANE r_nprstory_viewer_container_menu
+	{
+	items =
+		{
+		// added the new Options menu command here
+		MENU_ITEM
+				{
+				command = EListen;
+				txt = "Listen";
+				}
+		};
+	}
+
+RESOURCE STATUS_PANE_APP_MODEL r_nprstory_viewer_container_status_pane
+	{
+	panes =
+		{
+		SPANE_PANE
+			{
+			id = EEikStatusPaneUidTitle;
+			type = EAknCtTitlePane;
+			resource = r_nprstory_viewer_container_title_resource;
+			}
+		};
+	}
+
+RESOURCE TITLE_PANE r_nprstory_viewer_container_title_resource
+	{
+	txt = "News";
+	}
+
+RESOURCE RTXTED r_nprstory_viewer_container_rich_text1
+	{
+	numlines = 2;
+	default_case = EAknEditorTextCase;
+	allowed_case_modes = EAknEditorAllCaseModes;
+	numeric_keymap = EAknEditorStandardNumberModeKeymap;
+	default_input_mode = EAknEditorTextInputMode;
+	allowed_input_modes = EAknEditorTextInputMode | EAknEditorNumericInputMode | EAknEditorSecretAlphaInputMode | EAknEditorKatakanaInputMode | EAknEditorFullWidthTextInputMode | EAknEditorFullWidthNumericInputMode | EAknEditorFullWidthKatakanaInputMode | EAknEditorHiraganaKanjiInputMode | EAknEditorHalfWidthTextInputMode;
+	}
+
+RESOURCE TBUF r_nprstory_viewer_container_rich_text1_2
+	{
+	buf = "Title";
+	}
+
+RESOURCE RTXTED r_nprstory_viewer_container_rich_text2
+	{
+	numlines = 0;
+	default_case = EAknEditorTextCase;
+	allowed_case_modes = EAknEditorAllCaseModes;
+	numeric_keymap = EAknEditorStandardNumberModeKeymap;
+	default_input_mode = EAknEditorTextInputMode;
+	allowed_input_modes = EAknEditorTextInputMode | EAknEditorNumericInputMode | EAknEditorSecretAlphaInputMode | EAknEditorKatakanaInputMode | EAknEditorFullWidthTextInputMode | EAknEditorFullWidthNumericInputMode | EAknEditorFullWidthKatakanaInputMode | EAknEditorHiraganaKanjiInputMode | EAknEditorHalfWidthTextInputMode;
+	}
+
+RESOURCE TBUF r_nprstory_viewer_container_rich_text2_2
+	{
+	buf = "Body Text";
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/NPR_reg.rss	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,40 @@
+/*
+ ============================================================================
+ Name	: NPR_reg.rss
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : This file contains the application registration resource
+ ============================================================================
+ */
+
+#include "NPR.hrh"
+#include "NPR.rls"
+#include <appinfo.rh>
+#include <NPR_0xEEB0E481.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 _UID3
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file="NPR_0xEEB0E481";
+	localisable_resource_file =  qtn_loc_resource_file_1;
+	localisable_resource_id = R_LOCALISABLE_APP_INFO;
+
+	embeddability=KAppNotEmbeddable;
+	newfile=KAppDoesNotSupportNewFile;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/npr_news_stream.rm	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,1 @@
+rtsp://real.npr.org:80/real.npr.na-central/news.db.rm
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/npr_station_stream.rm	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,1 @@
+rtsp://a944.l1651832740.c16518.n.lr.akamaistream.net/live/D/944/16518/v0001/reflector:32740
\ No newline at end of file
Binary file gfx/npr_symbian_generic.bmp has changed
Binary file gfx/npr_symbian_generic_mask.bmp has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gfx/qgn_menu_NPR.svg	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="100px" version="1.1" viewBox="-1.1806641 -21.7124023 100 100" width="100px" x="0px" y="0px">
+<g transform="translate(-144.41879,-344.04288)">
+<g>
+<g>
+<g>
+<polygon fill="#6B6B6B" points="241.000824,377.9740295 234.8680115,380.1009827 225.6844177,347.7118225       231.7293396,345.3377991     "/>
+</g>
+<g>
+<polygon fill="#152B56" points="225.8172302,358.8270569 219.7605896,361.1180725 220.0838318,357.5174866       226.1336365,355.2010803     "/>
+</g>
+<image height="4" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 216.2381287 354.3304749)" width="10" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAChJREFUeNpiZMABxHWj/iPzWfBJ IgNGfApeXl7GiGIKTCEyGx0ABBgAQWwNtYGhss8AAAAASUVORK5CYII="/>
+<image height="3" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 217.2381287 358.3304749)" width="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAADCAYAAABBCiV2AAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpiZEADhYWF/9HFGHFJ wEB/fz8jIzYFIAlkPkCAAQAelwpWFLB5wwAAAABJRU5ErkJggg=="/>
+<image height="6" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 214.2381287 354.3304749)" width="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAGCAYAAAARx7TFAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBJREFUeNpiYCAAysvL/7PgkkDm M+KTBIHOzk5GRlySMAVgk3DpRuaz4JOEAYAAAwDdLhJwROTtTwAAAABJRU5ErkJggg=="/>
+<g>
+<polygon fill="#152B56" points="220.7713318,357.6732483 214.7303162,359.9828186 214.2771912,358.3783264       220.313324,356.0565491     "/>
+</g>
+<image height="8" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 215.2381287 358.3304749)" width="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAICAYAAAArzdW1AAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEdJREFUeNpiZMABJAzi/8PYjLgk YODFhYWMLLgkkQELNsH/f3+D6ZeXl4FtYoSZApNAByCFLLgkCVoHswYFiOtG4XU4QIABAKpLGrGx pC0/AAAAAElFTkSuQmCC"/>
+<g>
+<polygon fill="#152B56" points="225.1092224,373.004303 219.0262146,375.1966858 216.3318787,365.6522522       222.3875427,363.3866272     "/>
+</g>
+<g>
+<polygon fill="#152B56" points="220.313324,356.0565491 214.2771912,358.3783264 211.2361755,359.0091858       217.2654724,356.6859436     "/>
+</g>
+<g>
+<path d="M223.603363,355.075592c0.2578125-0.0532227,0.5039063-0.0908203,0.7373047-0.1123047      c0.234375-0.0214844,0.4570313-0.0268555,0.6679688-0.0166016s0.4091797,0.0366211,0.5966797,0.0791016      s0.3642578,0.1005859,0.5283203,0.175293l-0.3164063,3.6259766c-0.1669922-0.0805664-0.3320313-0.1474609-0.4970703-0.2006836      c-0.1650391-0.0527344-0.3291016-0.0917969-0.4921875-0.1162109c-0.1630859-0.0249023-0.3261719-0.0351563-0.4873047-0.03125      c-0.1621094,0.0039063-0.3222656,0.0224609-0.4824219,0.0561523c-0.1748047,0.0366211-0.3369141,0.0981445-0.4873047,0.184082      c-0.1513672,0.0859375-0.2890625,0.1972656-0.4160156,0.3334961c-0.1259766,0.1362305-0.2402344,0.2973633-0.3417969,0.4838867      c-0.1025391,0.1865234-0.1923828,0.3984375-0.2695313,0.6357422c-0.078125,0.2348633-0.1357422,0.4785156-0.1728516,0.7304688      s-0.0537109,0.512207-0.0498047,0.7802734s0.0283203,0.5444336,0.0732422,0.8286133      c0.0439453,0.2841797,0.1083984,0.5756836,0.1933594,0.875l2.7216797,9.6176758l-3.0400391,0.6777344l-4.8037109-16.996582      l3.0478516-0.6289063l0.4580078,1.6166992c0.1220703-0.3618164,0.2734375-0.6875,0.453125-0.9765625      s0.3867188-0.5415039,0.6230469-0.7578125c0.2363281-0.2158203,0.5009766-0.3959961,0.7939453-0.5400391      C222.9334412,355.2552795,223.2547302,355.1473694,223.603363,355.075592z" fill="#E6E6E6"/>
+</g>
+<g>
+<polygon fill="#6B6B6B" points="225.1092224,373.004303 219.0262146,375.1966858 215.993988,375.8753967       222.0691833,373.6820374     "/>
+</g>
+<g>
+<polygon fill="#6B6B6B" points="222.0691833,373.6820374 215.993988,375.8753967 211.2361755,359.0091858       217.2654724,356.6854553     "/>
+</g>
+<g>
+<polygon fill="#6B6B6B" points="231.7293396,345.3377991 225.6844177,347.7118225 200.2947693,352.7806702       206.2801208,350.3905334     "/>
+</g>
+<g>
+<path d="M206.2801208,350.3905334l25.4492188-5.0527344l9.2714844,32.6362305l-25.2958984,5.8457031      L206.2801208,350.3905334z M225.8172302,358.8270569l0.3164063-3.6259766      c-0.1640625-0.074707-0.3408203-0.1328125-0.5283203-0.175293s-0.3857422-0.0688477-0.5966797-0.0791016      s-0.4335938-0.0048828-0.6679688,0.0166016c-0.2333984,0.0214844-0.4794922,0.059082-0.7373047,0.1123047      c-0.3486328,0.0717773-0.6699219,0.1796875-0.9619141,0.3232422c-0.2929688,0.144043-0.5576172,0.3242188-0.7939453,0.5400391      c-0.2363281,0.2163086-0.4433594,0.46875-0.6230469,0.7578125s-0.3310547,0.6147461-0.453125,0.9765625l-0.4580078-1.6166992      l-3.0478516,0.6293945l4.8037109,16.9970703l3.0400391-0.6787109l-2.7216797-9.6176758      c-0.0849609-0.2993164-0.1494141-0.5908203-0.1933594-0.875c-0.0449219-0.2841797-0.0693359-0.5605469-0.0732422-0.8286133      s0.0126953-0.5283203,0.0498047-0.7802734s0.0947266-0.4956055,0.1728516-0.7304688      c0.0771484-0.2373047,0.1669922-0.4492188,0.2695313-0.6357422c0.1015625-0.1865234,0.2158203-0.3476563,0.3417969-0.4838867      c0.1269531-0.1362305,0.2646484-0.2475586,0.4160156-0.3334961c0.1503906-0.0859375,0.3125-0.1474609,0.4873047-0.184082      c0.1601563-0.0336914,0.3203125-0.0522461,0.4824219-0.0561523c0.1611328-0.0039063,0.3242188,0.0063477,0.4873047,0.03125      c0.1630859,0.0244141,0.3271484,0.0634766,0.4921875,0.1162109      C225.485199,358.6795959,225.650238,358.7464905,225.8172302,358.8270569" fill="#2E5CB8"/>
+</g>
+<g>
+<polygon fill="#152B56" points="241.000824,377.9740295 234.8680115,380.1009827 209.6277771,385.950592       215.7049255,383.8197327     "/>
+</g>
+<g>
+<polygon fill="#152B56" points="215.7049255,383.8197327 209.6277771,385.950592 200.2947693,352.7806702       206.2801208,350.3905334     "/>
+</g>
+<image height="18" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 188.2381287 360.3304749)" width="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAASCAYAAAC9+TVUAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC9JREFUeNpiYBgFo4AwYKRA739y DflPqUv+45JgokaYjBqCCViokc5YqJFAAQIMAMXdAxXMjbedAAAAAElFTkSuQmCC"/>
+<image height="17" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 188.2381287 360.3304749)" width="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAElJREFUeNpiZMAO/uMQZyRGEJdm vPoYSdSM1SBGEryC0yBGPAr+U8MQog1iIiUAcQEmBioARiLV4fUWCzUcwUJD14+CQQEAAgwAdqsH FjtVphsAAAAASUVORK5CYII="/>
+<image height="17" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 188.2381287 360.3304749)" width="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAClJREFUeNpiZMAO/iOxGRkIAEZK NCMr/E/AYKLAf4ZRMApGwdAFAAEGAJSLBAPYLj7NAAAAAElFTkSuQmCC"/>
+<image height="6" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 194.2381287 375.3304749)" width="11" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAGCAYAAAAVMmT4AAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC1JREFUeNpiZCAM/sMYjIQUIAFG RiIUwQ1lIsIZjOiM//gUIQv8x6cAGQAEGADWkQUIo9ICXgAAAABJRU5ErkJggg=="/>
+<image height="5" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 192.2381287 373.3304749)" width="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFCAYAAACXU8ZrAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACxJREFUeNpiYcADysvL/4NoFlwS yIARnyQIdHZ2MjJiUwCSwDAelykwABBgAKW1EZv/WCuSAAAAAElFTkSuQmCC"/>
+<image height="12" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 188.2381287 364.3304749)" width="14" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAMCAYAAABSgIzaAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFpJREFUeNpiZMACCgsL/2MT7+/v Z4SxGQkpxqWZkVgN6JoZiXUmukYmfP7AB5gYyAQ4TSfkZLJtpL5GQoHEQootbGxsDJ2dnYx4A6e8 vPz/r1+/UBQjA4AAAwCAPh5xuZPr2gAAAABJRU5ErkJggg=="/>
+<image height="4" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 189.2381287 374.3304749)" width="11" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAECAYAAABY+sXzAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUeNpiYCABMBKQ/09I8X9i DfyPRTEcAAQYAOPoBADJ8m2ZAAAAAElFTkSuQmCC"/>
+<image height="5" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 186.2381287 360.3304749)" width="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAFCAYAAACXU8ZrAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC5JREFUeNpiZMADysvL/4NoRnyS INDZ2cnIiE0CWQHcJHwKwIrQFSBLwgBAgAEAJlwSak5mk/wAAAAASUVORK5CYII="/>
+<g>
+<polygon points="192.7185974,362.9857483 186.7488708,365.3114319 186.4251404,364.153717 192.391449,361.8187561     "/>
+</g>
+<image height="5" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 187.2381287 364.3304749)" width="8" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpiZMAN/oMIRmyCSICR EYcEXDMjNl0MBIxFAQABBgC0qAUDoga1KwAAAABJRU5ErkJggg=="/>
+<g>
+<polygon points="196.1551208,375.2377014 190.1521912,377.4671936 187.6209412,368.4252014 193.5989685,366.1244202     "/>
+</g>
+<image height="4" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 189.2381287 374.3304749)" width="11" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAECAYAAABY+sXzAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpiYMAN/kMxHDBiUYAL MDISowiZ8R+fAmQAEGAAHmgFAlDoBdAAAAAASUVORK5CYII="/>
+<image height="3" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 190.2381287 378.3304749)" width="11" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAADCAYAAABF//VLAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpiZMACCgsL/2MTZySk AAb6+/sZGfEpAilA5gMEGACJHwpWRqCTMgAAAABJRU5ErkJggg=="/>
+<g>
+<polygon points="199.1805115,386.0218811 193.1477966,388.1654358 191.1390076,380.9906311 197.1521912,378.7894592     "/>
+</g>
+<g>
+<polygon points="192.391449,361.8187561 186.4251404,364.153717 183.2254333,364.8172913 189.1829529,362.4808655     "/>
+</g>
+<g>
+<polygon fill="#6B6B6B" points="199.1805115,386.0218811 193.1477966,388.1654358 189.9617615,388.8998108       195.9861755,386.7552795     "/>
+</g>
+<g>
+<polygon fill="#6B6B6B" points="195.9861755,386.7552795 189.9617615,388.8998108 183.2254333,364.8172913       189.1829529,362.4808655     "/>
+</g>
+<g>
+<polygon fill="#6B6B6B" points="206.2801208,350.3905334 200.2947693,352.7806702 173.6766052,358.094635       179.5906677,355.6898499     "/>
+</g>
+<g>
+<path d="M179.5906677,355.6898499l26.6894531-5.2993164l9.4248047,33.4291992l-26.5341797,6.1318359L179.5906677,355.6898499z       M204.3592224,375.5570374c0.1914063-0.4462891,0.3330078-0.9257813,0.4267578-1.4375      c0.0927734-0.5117188,0.1367188-1.0556641,0.1318359-1.6318359c-0.0039063-0.5761719-0.0566406-1.184082-0.1582031-1.8242188      s-0.2519531-1.3120117-0.4492188-2.0151367c-0.4257813-1.512207-0.9326172-2.8066406-1.5205078-3.8837891      c-0.5878906-1.0776367-1.2578125-1.9384766-2.0097656-2.5830078c-0.7529297-0.6450195-1.5878906-1.0727539-2.5058594-1.2841797      c-0.9199219-0.2114258-1.9228516-0.2055664-3.0107422,0.0185547c-0.2919922,0.0600586-0.5634766,0.1479492-0.8154297,0.2641602      c-0.2509766,0.1157227-0.4833984,0.2597656-0.6943359,0.4321289c-0.2124023,0.171875-0.4042969,0.3725586-0.5766602,0.6010742      c-0.1728516,0.2290039-0.3251953,0.4863281-0.4584961,0.7724609l-0.3271484-1.1669922l-3.2084961,0.6621094      l6.8032227,24.2744141l3.1943359-0.7333984l-2.0283203-7.2324219c0.2421875,0.0820313,0.4853516,0.1464844,0.7294922,0.1943359      c0.2451172,0.0478516,0.4902344,0.078125,0.7373047,0.0917969s0.4951172,0.0097656,0.7441406-0.0117188      c0.2480469-0.0214844,0.4980469-0.0595703,0.7490234-0.1162109c0.5185547-0.1152344,0.9970703-0.2734375,1.4335938-0.4726563      s0.8310547-0.4404297,1.1855469-0.7236328c0.3535156-0.2822266,0.6660156-0.6064453,0.9375-0.9726563      C203.9402771,376.4134827,204.1697693,376.0062561,204.3592224,375.5570374"/>
+</g>
+<g>
+<path d="M195.2635193,360.9159241c1.0878906-0.2241211,2.0908203-0.2299805,3.0107422-0.0185547      c0.9179688,0.2114258,1.7529297,0.6391602,2.5058594,1.2841797c0.7519531,0.6445313,1.421875,1.5053711,2.0097656,2.5830078      c0.5878906,1.0771484,1.0947266,2.371582,1.5205078,3.8837891c0.1972656,0.703125,0.3476563,1.375,0.4492188,2.0151367      s0.1542969,1.2480469,0.1582031,1.8242188c0.0048828,0.5761719-0.0390625,1.1201172-0.1318359,1.6318359      c-0.09375,0.5117188-0.2353516,0.9912109-0.4267578,1.4375c-0.1894531,0.4492188-0.4189453,0.8564453-0.6904297,1.2216797      c-0.2714844,0.3662109-0.5839844,0.6904297-0.9375,0.9726563c-0.3544922,0.2832031-0.7490234,0.5244141-1.1855469,0.7236328      s-0.9150391,0.3574219-1.4335938,0.4726563c-0.2509766,0.0566406-0.5009766,0.0947266-0.7490234,0.1162109      c-0.2490234,0.0214844-0.4970703,0.0253906-0.7441406,0.0117188s-0.4921875-0.0439453-0.7373047-0.0917969      c-0.2441406-0.0478516-0.4873047-0.1123047-0.7294922-0.1943359l2.0283203,7.2324219l-3.1943359,0.7333984      l-6.8032227-24.2744141l3.2084961-0.6621094l0.3271484,1.1669922c0.1333008-0.2861328,0.2856445-0.543457,0.4584961-0.7724609      c0.1723633-0.2285156,0.3642578-0.4291992,0.5766602-0.6010742c0.2109375-0.1723633,0.4433594-0.3164063,0.6943359-0.4321289      C194.7000427,361.0638733,194.9715271,360.9759827,195.2635193,360.9159241z M201.2010193,373.6644592      c0.0966797-0.2568359,0.1650391-0.5410156,0.2041016-0.8535156s0.0498047-0.6523438,0.03125-1.0200195      s-0.0664063-0.7631836-0.1425781-1.1860352s-0.1816406-0.8730469-0.3154297-1.3505859      c-0.1435547-0.5097656-0.2958984-0.9775391-0.4570313-1.4023438c-0.1611328-0.4257813-0.3320313-0.8085938-0.5117188-1.1499023      s-0.3691406-0.6411133-0.5673828-0.8989258c-0.1992188-0.2578125-0.4072266-0.4746094-0.625-0.6494141      c-0.2167969-0.1757813-0.4521484-0.3193359-0.7050781-0.4316406c-0.2539063-0.1123047-0.5263672-0.1923828-0.8173828-0.2416992      c-0.2910156-0.0488281-0.6005859-0.0664063-0.9296875-0.0522461c-0.328125,0.0136719-0.6757813,0.059082-1.0410156,0.1357422      c-0.1914063,0.0400391-0.3701172,0.1025391-0.5371094,0.1879883c-0.1679688,0.0849609-0.3232422,0.1928711-0.4667969,0.3227539      c-0.1445313,0.1303711-0.2763672,0.2832031-0.3964844,0.4580078s-0.2285156,0.3720703-0.324707,0.5917969l2.5561523,9.1132813      c0.1875,0.1171875,0.375,0.2148438,0.5634766,0.2919922c0.1875,0.0771484,0.3759766,0.1337891,0.5644531,0.1708984      c0.1894531,0.0371094,0.3798828,0.0546875,0.5703125,0.0517578c0.1914063-0.0029297,0.3837891-0.0263672,0.5771484-0.0683594      c0.3652344-0.0810547,0.6972656-0.1826172,0.9951172-0.3066406c0.2978516-0.125,0.5625-0.2705078,0.7929688-0.4384766      c0.2314453-0.1689453,0.4287109-0.3583984,0.5917969-0.5712891      C200.9744568,374.1556702,201.1043396,373.9212952,201.2010193,373.6644592" fill="#E6E6E6"/>
+</g>
+<g>
+<polygon points="215.7049255,383.8197327 209.6277771,385.950592 183.1624451,392.0843811 189.1707458,389.9515686     "/>
+</g>
+<g>
+<polygon points="189.1707458,389.9515686 183.1624451,392.0843811 173.6766052,358.094635 179.5906677,355.6898499     "/>
+</g>
+<g>
+<polygon fill="#6B1505" points="179.0535583,383.2777405 173.0906677,385.4779358 170.0970154,374.7269592       176.0301208,372.4388733     "/>
+</g>
+<g>
+<polygon fill="#6B6B6B" points="179.0535583,383.2777405 173.0906677,385.4779358 169.7874451,386.2171936       175.7410583,384.0160217     "/>
+</g>
+<g>
+<polygon fill="#6B6B6B" points="175.7410583,384.0160217 169.7874451,386.2171936 166.9681091,376.0814514       172.8934021,373.7982483     "/>
+</g>
+<image height="10" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 161.2381287 365.3304749)" width="15" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEVJREFUeNpiYCAACsXZ/uOSYyRF MQj0v/zFiKGZkCZsBjCSogndAEZS/UlQM7EGMBETMCRrJgYwkhPPMFexkBo9yAAgwADRaRwPrTDu zQAAAABJRU5ErkJggg=="/>
+<image height="7" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 162.2381287 369.3304749)" width="11" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAHCAYAAADebrddAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUeNpiZMACCgsL/yPz+/v7 GUE0Iz5F6BoY8SlAB0wMJACinYGhGJ8GkJtZ8JkECwUYAAgwAHdCEl43EnYdAAAAAElFTkSuQmCC"/>
+<image height="6" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 160.2381287 369.3304749)" width="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAGCAYAAAARx7TFAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiZMADyiXY/oNoRnyS IND54hcjIzYJZAUgmgmXAmTAiK4AphsZsOCThAGAAAMAcXkRn7XKvykAAAAASUVORK5CYII="/>
+<image height="6" preserveAspectRatio="xMidYMid meet" transform="matrix(1 0 0 1 158.2381287 366.3304749)" width="10" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiZMADysvL/8PYjIQU gEBnZycjIy5JZEVwEwkpAgEWfJIY7sFlIjIACDAAxvMU0XNM3fcAAAAASUVORK5CYII="/>
+<g>
+<polygon fill="#6B1505" points="165.0530701,369.2137756 159.1629333,371.5458069 158.0887146,370.0296936       163.9720154,367.6839905     "/>
+</g>
+<g>
+<polygon fill="#6B1505" points="169.8733826,385.325592 163.9373474,387.5267639 160.400238,374.785553       166.3006287,372.4803772     "/>
+</g>
+<g>
+<polygon fill="#6B1505" points="163.9720154,367.6839905 158.0887146,370.0296936 155.6668396,370.532135       161.5428162,368.1854553     "/>
+</g>
+<g>
+<polygon fill="#6B6B6B" points="166.5135193,386.0746155 160.5882263,388.2767639 155.6668396,370.5316467       161.5428162,368.1854553     "/>
+</g>
+<g>
+<polygon fill="#6B6B6B" points="169.8733826,385.3246155 163.9373474,387.5267639 160.5882263,388.2767639       166.5135193,386.0746155     "/>
+</g>
+<g>
+<polygon fill="#6B6B6B" points="179.5906677,355.6898499 173.6766052,358.094635 145.7308044,363.6737366       151.5584412,361.2557678     "/>
+</g>
+<g>
+<path d="M151.5584412,361.2557678l28.0322266-5.565918l9.5800781,34.2617188l-27.8720703,6.4414063      L151.5584412,361.2557678z M179.0535583,383.2777405l-3.0234375-10.8388672      c-0.1567383-0.5629883-0.3359375-1.0878906-0.5366211-1.5756836s-0.4233398-0.9379883-0.6674805-1.3505859      c-0.2446289-0.4130859-0.5112305-0.7890625-0.7993164-1.128418c-0.2885742-0.3393555-0.5991211-0.6416016-0.9311523-0.9077148      c-0.3330078-0.2612305-0.6767578-0.4799805-1.0327148-0.6552734s-0.7231445-0.3071289-1.1015625-0.3955078      c-0.3793945-0.0883789-0.7695313-0.1333008-1.171875-0.1337891c-0.4023438-0.0009766-0.8168945,0.0424805-1.2426758,0.1303711      c-0.4438477,0.0913086-0.8496094,0.2182617-1.2167969,0.3803711s-0.6962891,0.359375-0.9873047,0.5917969      c-0.2910156,0.2329102-0.5439453,0.5009766-0.7587891,0.8041992s-0.3916016,0.6416016-0.5307617,1.0151367l-1.0810547-1.5297852      l-2.4291992,0.5014648l4.9707031,17.8891602l3.3598633-0.7490234l-3.5727539-12.8452148      c0.0429688-0.1430664,0.0952148-0.2822266,0.1572266-0.418457c0.0615234-0.1362305,0.1328125-0.269043,0.2128906-0.3984375      s0.1694336-0.2553711,0.2675781-0.3779297c0.0981445-0.1230469,0.2055664-0.2421875,0.3217773-0.3579102      c0.1166992-0.1132813,0.2338867-0.2163086,0.3515625-0.3085938c0.1181641-0.0922852,0.2363281-0.1743164,0.3554688-0.2446289      c0.1191406-0.0708008,0.2392578-0.1303711,0.3598633-0.1787109c0.1201172-0.0483398,0.2416992-0.0854492,0.3637695-0.1108398      c0.2651367-0.0556641,0.5180664-0.0859375,0.7583008-0.090332c0.2402344-0.0048828,0.4677734,0.0166016,0.6831055,0.0629883      c0.2148438,0.0463867,0.4179688,0.1186523,0.6088867,0.2167969c0.1904297,0.0981445,0.3691406,0.2216797,0.5356445,0.3710938      c0.1650391,0.1499023,0.3222656,0.3276367,0.4716797,0.5332031c0.1499023,0.2055664,0.2915039,0.4399414,0.4262695,0.7021484      s0.2617188,0.5532227,0.3813477,0.8725586c0.1201172,0.3193359,0.2324219,0.6679688,0.3374023,1.0449219l2.8476563,10.2177734      L179.0535583,383.2777405" fill="#E62E0C"/>
+</g>
+<g>
+<path d="M168.5467224,366.4222717c0.4257813-0.0878906,0.840332-0.1313477,1.2426758-0.1303711      c0.4023438,0.0004883,0.7924805,0.0454102,1.171875,0.1337891c0.378418,0.0883789,0.7460938,0.2202148,1.1015625,0.3955078      c0.355957,0.175293,0.699707,0.394043,1.0327148,0.6552734c0.3325195,0.2661133,0.6425781,0.5683594,0.9311523,0.9077148      c0.2880859,0.3393555,0.5546875,0.715332,0.7993164,1.128418c0.2441406,0.4125977,0.4667969,0.862793,0.6674805,1.3505859      s0.3798828,1.0126953,0.5366211,1.5756836l3.0234375,10.8388672l-3.3125,0.7382813l-2.8476563-10.2177734      c-0.1049805-0.3769531-0.2172852-0.7255859-0.3374023-1.0449219c-0.1196289-0.3193359-0.246582-0.6103516-0.3813477-0.8725586      s-0.2763672-0.496582-0.4262695-0.7021484c-0.1494141-0.2055664-0.3066406-0.3833008-0.4716797-0.5332031      c-0.1665039-0.1494141-0.3452148-0.2729492-0.5356445-0.3710938c-0.190918-0.0981445-0.3935547-0.1704102-0.6088867-0.2167969      s-0.4428711-0.0678711-0.6831055-0.0629883c-0.2402344,0.0043945-0.4931641,0.034668-0.7583008,0.090332      c-0.1220703,0.0253906-0.2436523,0.0625-0.3637695,0.1108398c-0.1206055,0.0483398-0.2407227,0.1079102-0.3598633,0.1787109      c-0.1191406,0.0703125-0.2373047,0.1523438-0.3554688,0.2446289c-0.1176758,0.0922852-0.2348633,0.1953125-0.3515625,0.3085938      c-0.1162109,0.1157227-0.2236328,0.2348633-0.3217773,0.3579102c-0.0981445,0.1225586-0.1875,0.2485352-0.2675781,0.3779297      s-0.1513672,0.262207-0.2128906,0.3984375s-0.1142578,0.2753906-0.1572266,0.418457l3.5727539,12.8442383l-3.3598633,0.75      l-4.9707031-17.8891602l2.4291992-0.5014648l1.0810547,1.5297852c0.1391602-0.3735352,0.315918-0.7119141,0.5307617-1.0151367      s0.4677734-0.5712891,0.7587891-0.8041992c0.2910156-0.2324219,0.6201172-0.4296875,0.9873047-0.5917969      S168.1028748,366.5135803,168.5467224,366.4222717z" fill="#E6E6E6"/>
+</g>
+<g>
+<polygon fill="#6B1505" points="161.2986755,396.3929749 155.3733826,398.5248108 145.7308044,363.6737366       151.5584412,361.2557678     "/>
+</g>
+<g>
+<polygon fill="#6B1505" points="189.1707458,389.9515686 183.1624451,392.0843811 155.3733826,398.5248108       161.2986755,396.3929749     "/>
+</g>
+<g>
+<path d="M150.2395935,360.2347717l82.0112305-16.1918945l9.9072266,34.8637695l-81.4990234,18.9257813      L150.2395935,360.2347717z M241.000824,377.9740295l-9.2714844-32.6362305l-25.4492188,5.0527344l-26.6894531,5.2993164      l-28.0322266,5.565918l9.7402344,35.137207l27.8720703-6.4414063l26.5341797-6.1318359L241.000824,377.9740295" fill="#E6E6E6"/>
+</g>
+<g>
+<path d="M195.3240662,364.5638733c0.3652344-0.0766602,0.7128906-0.1220703,1.0410156-0.1357422      c0.3291016-0.0141602,0.6386719,0.003418,0.9296875,0.0522461c0.2910156,0.0493164,0.5634766,0.1293945,0.8173828,0.2416992      c0.2529297,0.1123047,0.4882813,0.2558594,0.7050781,0.4316406c0.2177734,0.1748047,0.4257813,0.3916016,0.625,0.6494141      c0.1982422,0.2578125,0.3876953,0.5576172,0.5673828,0.8989258s0.3505859,0.7241211,0.5117188,1.1499023      c0.1611328,0.4248047,0.3134766,0.8925781,0.4570313,1.4023438c0.1337891,0.4775391,0.2392578,0.9277344,0.3154297,1.3505859      s0.1240234,0.8183594,0.1425781,1.1860352s0.0078125,0.7075195-0.03125,1.0200195s-0.1074219,0.5966797-0.2041016,0.8535156      s-0.2265625,0.4912109-0.390625,0.703125c-0.1630859,0.2128906-0.3603516,0.4023438-0.5917969,0.5712891      c-0.2304688,0.1679688-0.4951172,0.3134766-0.7929688,0.4384766c-0.2978516,0.1240234-0.6298828,0.2255859-0.9951172,0.3066406      c-0.1933594,0.0419922-0.3857422,0.0654297-0.5771484,0.0683594c-0.1904297,0.0029297-0.3808594-0.0146484-0.5703125-0.0517578      c-0.1884766-0.0371094-0.3769531-0.09375-0.5644531-0.1708984c-0.1884766-0.0771484-0.3759766-0.1748047-0.5634766-0.2919922      l-2.5561523-9.1132813c0.0961914-0.2197266,0.2045898-0.4169922,0.324707-0.5917969s0.2519531-0.3276367,0.3964844-0.4580078      c0.1435547-0.1298828,0.2988281-0.237793,0.4667969-0.3227539      C194.953949,364.6664124,195.1326599,364.6039124,195.3240662,364.5638733z"/>
+</g>
+<g>
+<polygon fill="#6B6B6B" points="242.1580505,378.9066467 236.0203552,381.0248108 154.7332458,399.9544983       160.6590271,397.832428     "/>
+</g>
+<g>
+<polygon fill="#6B6B6B" points="160.6590271,397.832428 154.7332458,399.9544983 144.4187927,362.6634827       150.2395935,360.2347717     "/>
+</g>
+</g>
+</g>
+</g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/group/Icons_scalable_dc.mk	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,54 @@
+# ============================================================================
+#  Name	 : Icons_scalable_dc.mk
+#  Part of  : NPR
+#
+#  Description: This is file for creating .mif file (scalable icon)
+# 
+# ============================================================================
+
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+
+TARGETDIR=$(ZDIR)\resource\apps
+ICONTARGETFILENAME=$(TARGETDIR)\NPR_0xEEB0E481.mif
+
+ICONDIR=..\gfx
+
+do_nothing :
+	@rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# NOTE: if you have JUSTINTIME enabled for your S60 3rd FP1 or newer SDK
+# and this command crashes, consider adding "/X" to the command line.
+# See <http://forum.nokia.com/document/Forum_Nokia_Technical_Library_v1_35/contents/FNTL/Build_process_fails_at_mif_file_creation_in_S60_3rd_Ed_FP1_SDK.htm>
+# ----------------------------------------------------------------------------
+
+RESOURCE : $(ICONTARGETFILENAME)
+
+$(ICONTARGETFILENAME) : $(ICONDIR)\qgn_menu_NPR.svg
+	mifconv $(ICONTARGETFILENAME) \
+		/c32 $(ICONDIR)\qgn_menu_NPR.svg
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/group/NPR.mmp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,113 @@
+/*
+ ============================================================================
+ Name	: NPR.mmp
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : This is the project specification file for NPR
+ ============================================================================
+ */
+
+TARGET			NPR_0xEEB0E481.exe
+TARGETTYPE		exe
+UID		  0x100039CE 0xEEB0E481
+
+EPOCHEAPSIZE 0x8000 0xFA000
+
+SOURCEPATH		..\src
+SOURCE			NPR.cpp
+SOURCE			NPRApplication.cpp
+SOURCE			NPRAppView.cpp
+SOURCE			NPRAppUi.cpp
+SOURCE			NPRDocument.cpp
+SOURCE			HttpClient.cpp
+SOURCE			NPRStoryXmlParser.cpp
+SOURCE			NPRStationXmlParser.cpp
+SOURCE			NPRAppEngine.cpp
+SOURCE			NPRStory.cpp
+SOURCE			NPRStation.cpp
+SOURCE			NPRListBox.cpp
+SOURCE			NPRListBoxView.cpp
+SOURCE 			NPRStationListBox.cpp
+SOURCE			NPRStationListBoxView.cpp
+SOURCE 			NPRSearchStationListBox.cpp
+SOURCE 			NPRSearchStationListBoxView.cpp
+SOURCE 			NPRStoryListBoxView.cpp
+SOURCE 			NPRStoryListBox.cpp
+SOURCE			NPRBrowserAknView.cpp
+SOURCE			NPRBrowserContainer.cpp
+SOURCE 			NPRHtmlCreator.cpp
+
+SOURCEPATH		..\data
+
+START RESOURCE	NPR.rss
+HEADER
+TARGET NPR_0xEEB0E481
+TARGETPATH resource\apps
+END //RESOURCE
+
+START RESOURCE	NPR_reg.rss
+TARGET NPR_0xEEB0E481_reg
+TARGETPATH 	  \private\10003a3f\apps
+END //RESOURCE
+
+USERINCLUDE	   ..\inc
+USERINCLUDE    ..\help ..\data
+SYSTEMINCLUDE	 \epoc32\include
+
+LIBRARY		   euser.lib
+LIBRARY		   apparc.lib
+LIBRARY		   cone.lib
+LIBRARY		   eikcore.lib
+LIBRARY		   avkon.lib
+LIBRARY		   commonengine.lib
+LIBRARY		   efsrv.lib 
+LIBRARY		   estor.lib
+LIBRARY        aknnotify.lib
+LIBRARY		   eikctl.lib 
+LIBRARY		   eikcoctl.lib 
+LIBRARY  	   apgrfx.lib
+LIBRARY  	   apmime.lib
+LIBRARY  	   commonui.lib
+LIBRARY  	   aknicon.lib
+LIBRARY  	   egul.lib
+LIBRARY        hlplch.lib
+LIBRARY        inetprotutil.lib
+LIBRARY        http.lib
+LIBRARY        bafl.lib
+LIBRARY        esock.lib
+LIBRARY        xmlframework.lib
+LIBRARY        etext.lib
+LIBRARY		   BrowserEngine.lib
+
+LANG SC
+
+VENDORID	  	  0
+SECUREID		  0xEEB0E481
+CAPABILITY	  	  NetworkServices ReadUserData WriteDeviceData SwEvent
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
+
+START BITMAP	list_icons.mbm
+HEADER
+TARGETPATH		\resource\apps
+SOURCEPATH		..\gfx
+SOURCE	c24,1	npr_symbian_generic.bmp 
+SOURCE	c24,1	npr_symbian_generic_mask.bmp 
+END
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/group/bld.inf	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,41 @@
+/*
+ ===========================================================================================
+ Name	: bld.inf
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : This file provides the information required for building the whole of a NPR.
+ ===========================================================================================
+ */
+
+PRJ_PLATFORMS
+WINSCW ARMV5 GCCE
+
+PRJ_EXPORTS
+../testdata/pic1.jpg c:/data/npr/pic1.jpg
+../testdata/pic2.jpg c:/data/npr/pic2.jpg
+../testdata/pic3.jpg c:/data/npr/pic3.jpg
+../testdata/pic4.jpg c:/data/npr/pic4.jpg
+../testdata/pic5.jpg c:/data/npr/pic5.jpg
+../testdata/pic6.jpg c:/data/npr/pic6.jpg
+
+PRJ_MMPFILES
+
+gnumakefile icons_scalable_dc.mk
+
+gnumakefile ..\help\build_help.mk
+
+NPR.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/help/Custom.xml	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshcust SYSTEM "/cshlpcmp/dtd/CSHcust.dtd">
+<?xml:stylesheet href="/cshlpcmp/xsl/cshcust.xsl" title="CS-Help customization" type="text/xsl"?>
+<cshcust>
+<parastyle name="body" font="sansserif" size="10"/>
+<parastyle name="tip" font="sansserif" size="10" left="20"></parastyle>
+<parastyle name="note" font="sansserif" size="10" left="20"></parastyle>
+<parastyle name="important" font="sansserif" size="10" left="20"></parastyle>
+<body style="body"/>
+<titlestyle fontstyle="sansserif" size="10"/>
+<listbullet1style bulletchar="8226"/>
+<listbullet2style bulletchar="8226"/>
+<lists leftindent="20"/>
+</cshcust>
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/help/NPR.cshlp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshproj SYSTEM "/epoc32/tools/cshlpcmp/dtd/cshproj.dtd">
+<?xml:stylesheet href="/epoc32/tools/cshlpcmp/xsl/CSHproj.xsl" title="CS-Help project" type="text/xsl"?>
+<cshproj>
+<helpfileUID>0xEEB0E481</helpfileUID>
+<directories>
+	<input></input>
+	<output></output>
+	<graphics></graphics>
+	<working>temp\</working>
+</directories>
+<files>
+	<source>
+	<xmlfile>NPR.xml</xmlfile>
+	</source>
+	<destination>NPR_0xEEB0E481.hlp</destination>
+	<customization>custom.xml</customization>
+	</files>
+</cshproj>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/help/NPR.xml	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!DOCTYPE asptml SYSTEM "/epoc32/tools/cshlpcmp/dtd/asptml.dtd">
+<?xml:stylesheet href="/epoc32/tools/cshlpcmp/xsl/asptml.xsl" title="asptml" type="text/xsl"?>
+<asptml>
+<uid value="0xEEB0E481"/>
+<topic><category>NPR</category><topictitle>General Information</topictitle>
+<synonyms>General Information</synonyms>
+<context contextUID="General_Information"/>
+<index>General Information</index>
+<p>Insert your help here.</p>
+<p></p>
+</topic>
+</asptml>
Binary file help/NPR_0xEEB0E481.hlp has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/help/NPR_0xEEB0E481.hlp.hrh	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,15 @@
+//
+// NPR_0xEEB0E481.hlp.hrh
+//
+
+//
+// File generated by cshlpcmp Version 011
+//
+
+#ifndef __NPR_0XEEB0E481_HLP_HRH__
+#define __NPR_0XEEB0E481_HLP_HRH__
+
+
+_LIT(KGeneral_Information,"General_Information");
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/help/build_help.mk	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,46 @@
+# ============================================================================
+#  Name	 : build_help.mk
+#  Part of  : NPR
+# ============================================================================
+#  Name	 : build_help.mk
+#  Part of  : NPR
+#
+#  Description: This make file will build the application help file (.hlp)
+# 
+# ============================================================================
+
+do_nothing :
+	@rem do_nothing
+
+# build the help from the MAKMAKE step so the header file generated
+# will be found by cpp.exe when calculating the dependency information
+# in the mmp makefiles.
+
+MAKMAKE : NPR_0xEEB0E481.hlp
+NPR_0xEEB0E481.hlp : NPR.xml NPR.cshlp Custom.xml
+	cshlpcmp NPR.cshlp
+ifeq (WINSCW,$(findstring WINSCW, $(PLATFORM)))
+	md $(EPOCROOT)epoc32\$(PLATFORM)\c\resource\help
+	copy NPR_0xEEB0E481.hlp $(EPOCROOT)epoc32\$(PLATFORM)\c\resource\help
+endif
+
+BLD : do_nothing
+
+CLEAN :
+	del NPR_0xEEB0E481.hlp
+	del NPR_0xEEB0E481.hlp.hrh
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+RESOURCE : do_nothing
+		
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo NPR_0xEEB0E481.hlp
+
+FINAL : do_nothing
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/help/temp/NPR_0xEEB0E481.cshlp.xml	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<!DOCTYPE cshlp SYSTEM "file:///G:/epoc32/tools/cshlpcmp/dtd/cshlp.dtd">
+<?xml:stylesheet href="file:///G:/epoc32/tools/cshlpcmp/xsl/cshlp.xsl" title="cshlp" type="text/xsl"?>
+<cshlp helpfileUID="4004570241">
+
+
+<topic topicID="1" categoryUID="4004570241"><category>NPR</category><topictitle>General Information</topictitle>
+<synonyms>General Information</synonyms>
+
+
+<p font="sansserif" style="normal" size="10" color="foreground" justify="left" spacing="10" before="5" after="0" left="0" right="0">Insert your help here.</p>
+<p font="sansserif" style="normal" size="10" color="foreground" justify="left" spacing="10" before="5" after="0" left="0" right="0"/>
+</topic>
+<uid value="4004570241"/>
+<context contextUID="General_Information" topicID="1"/>
+<indexlink topicID="1" indexID="0" categoryUID="4004570241">General Information</indexlink>
+<index indexID="0">General Information</index>
+
+<customization><titlestyle fontstyle="sansserif" size="10"/>
+<listbullet1style bulletchar="8226"/>
+<listbullet2style bulletchar="8226"/>
+<lists leftindent="20"/>
+<body font="sansserif" style="normal" size="10" color="foreground" justify="left" spacing="10" before="5" after="0" left="0" right="0"></body>
+</customization>
+<mbmlist/></cshlp>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/HttpClient.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,87 @@
+/*
+ ============================================================================
+ Name	: HttpClient.h
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : This file contains panic codes.
+ ============================================================================
+ */
+
+#ifndef __HTTP_CLIENT_H_
+#define __HTTP_CLIENT_H_
+
+#include <es_sock.h>
+#include <http/mhttpdatasupplier.h>
+#include <http/mhttptransactioncallback.h>
+#include <http/rhttpheaders.h>
+#include <http/RHTTPSession.h>
+
+#include "NPRStoryXmlParser.h"
+
+class MHTTPObserver
+	{
+	public:
+		virtual void ResponseStatusL(TInt aStatusCode, const TDesC& aStatusText) = 0;
+		virtual void ResponseReceivedL(const TDesC8& aResponseBuffer) = 0;
+	};
+
+/*
+ * This class implements the http request response sequence using RHTTPSession
+ * class. The IAP selection is not done silently and needs user input.
+ */
+
+class CHttpClient : public CBase,
+					public MHTTPTransactionCallback,
+					public MHTTPDataSupplier
+	{
+public:
+	static CHttpClient* NewL(MHTTPObserver& aObserver);
+	virtual ~CHttpClient();
+	
+public:
+	void SendRequestL(const TDesC& aUri);
+
+	//From MHTTPTransactionCallback
+	void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent &aEvent);
+	TInt MHFRunError(TInt aError, RHTTPTransaction aTransaction, const THTTPEvent &aEvent);
+	
+	//From MHTTPDataSupplier
+	TBool GetNextDataPart(TPtrC8& aDataPart);
+	void ReleaseData();
+	TInt OverallDataSize();
+	TInt Reset();
+
+private:
+	void AddHeaderL(RHTTPHeaders aHeaders, TInt aHeaderField, const TDesC8& aHeaderValue);
+	void AddHeaderL(RHTTPHeaders aHeaders, TInt aHeaderField, const TDesC8& aHeaderValue, TInt aExtensionField, const TDesC8& aExtensionValue);
+	
+private:
+	CHttpClient(MHTTPObserver& aObserver);
+	void ConstructL();
+
+private:
+	RHTTPSession 			iHTTPSession;
+	MHTTPObserver& 			iObserver;
+	RSocketServ 			iSocketServ;
+	RConnection 			iConnection;
+	RHTTPTransaction		iHttpTransaction;
+	RHTTPConnectionInfo 	iHttpConnInfo;
+	HBufC8* 				iResponseBuffer; // The buffers to hold the request and response bodies.
+	HBufC8* 				iUri;
+	TBool 					iTransactionActive;
+	};
+
+#endif /* __HTTP_CLIENT_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPR.hrh	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,81 @@
+/*
+ ============================================================================
+ Name	: NPR.hrh
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description:
+ ============================================================================
+ */
+
+#ifndef __NPR_HRH__
+#define __NPR_HRH__
+
+#define _UID3 0xEEB0E481
+
+// NPR enumerate AppUi commands code
+enum TNPRAppUiIds
+	{
+	EPlayCmd = 0x6001, // start value must not be 0
+	EPauseCmd,
+	ERequestNprCmd, 
+	EListen,
+	ESelect,
+	EShare, 
+	EHelp, 
+	EAbout,
+	ELoadPage
+	};
+
+// NPR enumerate command codes
+enum TNPRCommands
+	{
+	ENewsCmd = 0x0,
+	EStationsCmd,
+	EPlayStationStream,
+	EPlayNewsStream,
+	EPlaylist,
+	ESettings
+	};
+
+// NPR enumerate topic codes
+enum TNPRTopics
+	{
+	ENews = 0x0,
+	EStations,
+	EPrograms
+	};
+
+// NPR enumerate search codes
+enum TNPRStationSearch
+	{
+	EZipCode = 0x0,
+	ECurrentLocation,
+	ECityName,
+	EShowAll
+	};
+
+// NPR enumerate aknview uid
+enum TNPRViewUids
+	{
+	ENPRListBoxViewId = 0x1,
+	ENPRStationListBoxViewId,
+	ENPRSearchStationListBoxViewId,
+	ENPRStoryListBoxViewId,
+	ENPRBrowserViewId,
+	ENPRStoryViewerContainerViewId
+	};
+
+#endif // __NPR_HRH__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPR.pan	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,36 @@
+/*
+ ============================================================================
+ Name	: NPR.pan
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors: John Kern
+ Description : This file contains panic codes.
+ ============================================================================
+ */
+
+#ifndef __NPR_PAN__
+#define __NPR_PAN__
+
+/** NPR application panic codes */
+enum TNPRPanics
+	{
+	ENPRUi = 1
+	// add further panics here
+	};
+
+inline void Panic(TNPRPanics aReason)
+	{
+	_LIT(applicationName, "NPR");
+	User::Panic(applicationName, aReason);
+	}
+
+#endif // __NPR_PAN__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRAppEngine.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,75 @@
+/*
+ ============================================================================
+ Name	: NPRAppEngine.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description:
+ ============================================================================
+ */
+
+#ifndef __NPR_APP_ENGINE_H__
+#define __NPR_APP_ENGINE_H__
+
+#include <e32base.h>
+#include "HttpClient.h"
+#include "NPR.hrh"
+
+class CAknWaitDialog;
+class CDocumentHandler;
+class CNPRAppUi;
+class CNPRStation;
+class CNPRStories;
+
+
+class CNPRAppEngine : public CBase, public MHTTPObserver
+	{
+public:
+	static CNPRAppEngine* NewL(CNPRAppUi& aNPRAppUi);
+ 	virtual ~CNPRAppEngine();
+ 	
+public:
+	void SendNPRCommandL(const TNPRCommands aCommand, const TDesC& aField);
+	const RPointerArray<CNPRStation>* Stations();
+	const RPointerArray<CNPRStory>* Stories();
+
+public:
+	//From MHTTPObserver
+	void ResponseStatusL(TInt aStatusCode, const TDesC& aStatusText);
+	void ResponseReceivedL(const TDesC8& aResponseBuffer) ;
+
+private:
+	void SearchStationsL(const TDesC& aField);
+	void SearchNewsL(const TDesC& aField);
+    void LaunchFileL(const TDesC& aFilename);
+    void RefreshDocumentFileL(const TUid& aUid, const TDesC& aFileName);
+    void ShowWaitingDialogL(const TDesC& aText);
+    void DismissWaitingDialogL();
+	
+private:
+	CNPRAppEngine(CNPRAppUi& aNPRAppUi);
+	void ConstructL();
+	
+private:
+	CNPRAppUi& 					iNPRAppUi;
+	CHttpClient* 				iHttp;
+	TNPRCommands 				iNPRCommand;
+	CDocumentHandler* 			iDocHandler;
+	RPointerArray<CNPRStation> 	iStationArray;
+	RPointerArray<CNPRStory> 	iStoryArray;
+	CAknWaitDialog* 			iWaitDialog;
+	};
+
+#endif // __NPR_APP_ENGINE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRAppUi.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,116 @@
+/*
+ ============================================================================
+ Name	: NPRAppUi.h
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ - Symsource
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : Declares UI class for application.
+ ============================================================================
+ */
+
+/*
+ ============================================================================
+ Name		: NPRAppUi.h
+ Author	  : John Kern
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors: John Kern
+ Description : Declares UI class for application.
+ ============================================================================
+ */
+
+#ifndef __NPR_APP_UI_h__
+#define __NPR_APP_UI_h__
+
+// INCLUDES
+#include <aknviewappui.h>
+
+// FORWARD DECLARATIONS
+class CNPRAppView;
+class CNPRAppEngine;
+
+// CLASS DECLARATION
+/**
+ * CNPRAppUi application UI class.
+ * Interacts with the user through the UI and request message processing
+ * from the handler class
+ */
+class CNPRAppUi : public CAknViewAppUi
+	{
+public:
+	// Constructors and destructor
+
+	/**
+	 * ConstructL.
+	 * 2nd phase constructor.
+	 */
+	void ConstructL();
+
+	/**
+	 * CNPRAppUi.
+	 * C++ default constructor. This needs to be public due to
+	 * the way the framework constructs the AppUi
+	 */
+	CNPRAppUi();
+
+	/**
+	 * ~CNPRAppUi.
+	 * Virtual Destructor.
+	 */
+	virtual ~CNPRAppUi();
+
+	CNPRAppEngine& Engine();
+	void ResponseStatusL(TInt aStatusCode, const TDesC& aStatusText);
+	void ResponseReceivedL(const TDesC8& aResponseBuffer) ;
+	
+private:
+	// Functions from base classes
+
+	/**
+	 * From CEikAppUi, HandleCommandL.
+	 * Takes care of command handling.
+	 * @param aCommand Command to be handled.
+	 */
+	void HandleCommandL(TInt aCommand);
+
+	/**
+	 *  HandleStatusPaneSizeChange.
+	 *  Called by the framework when the application status pane
+	 *  size is changed.
+	 */
+	void HandleStatusPaneSizeChange();
+
+	/**
+	 *  From CCoeAppUi, HelpContextL.
+	 *  Provides help context for the application.
+	 *  size is changed.
+	 */
+	CArrayFix<TCoeHelpContext>* HelpContextL() const;
+
+private:
+	// Data
+	CNPRAppEngine* iNPRAppEngine;
+	};
+
+#endif // __NPR_APP_UI_h__
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRAppView.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,102 @@
+/*
+ ============================================================================
+ Name		: NPRAppView.h
+ Author	  : John Kern
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors: John Kern
+ Description : Declares view class for application.
+ ============================================================================
+ */
+
+#ifndef __NPRAPPVIEW_h__
+#define __NPRAPPVIEW_h__
+
+// INCLUDES
+#include <coecntrl.h>
+
+// CLASS DECLARATION
+class CNPRAppView : public CCoeControl
+	{
+public:
+	// New methods
+
+	/**
+	 * NewL.
+	 * Two-phased constructor.
+	 * Create a CNPRAppView object, which will draw itself to aRect.
+	 * @param aRect The rectangle this view will be drawn to.
+	 * @return a pointer to the created instance of CNPRAppView.
+	 */
+	static CNPRAppView* NewL(const TRect& aRect);
+
+	/**
+	 * NewLC.
+	 * Two-phased constructor.
+	 * Create a CNPRAppView object, which will draw itself
+	 * to aRect.
+	 * @param aRect Rectangle this view will be drawn to.
+	 * @return A pointer to the created instance of CNPRAppView.
+	 */
+	static CNPRAppView* NewLC(const TRect& aRect);
+
+	/**
+	 * ~CNPRAppView
+	 * Virtual Destructor.
+	 */
+	virtual ~CNPRAppView();
+
+public:
+	// Functions from base classes
+
+	/**
+	 * From CCoeControl, Draw
+	 * Draw this CNPRAppView to the screen.
+	 * @param aRect the rectangle of this view that needs updating
+	 */
+	void Draw(const TRect& aRect) const;
+
+	/**
+	 * From CoeControl, SizeChanged.
+	 * Called by framework when the view size is changed.
+	 */
+	virtual void SizeChanged();
+
+	/**
+	 * From CoeControl, HandlePointerEventL.
+	 * Called by framework when a pointer touch event occurs.
+	 * Note: although this method is compatible with earlier SDKs, 
+	 * it will not be called in SDKs without Touch support.
+	 * @param aPointerEvent the information about this event
+	 */
+	virtual void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+private:
+	// Constructors
+
+	/**
+	 * ConstructL
+	 * 2nd phase constructor.
+	 * Perform the second phase construction of a
+	 * CNPRAppView object.
+	 * @param aRect The rectangle this view will be drawn to.
+	 */
+	void ConstructL(const TRect& aRect);
+
+	/**
+	 * CNPRAppView.
+	 * C++ default constructor.
+	 */
+	CNPRAppView();
+
+	};
+
+#endif // __NPRAPPVIEW_h__
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRApplication.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,69 @@
+/*
+ ============================================================================
+ Name	: NPRApplication.h
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - John Kern
+ 
+ Description : Declares main application class.
+ ============================================================================
+ */
+
+
+#ifndef __NPR_APPLICATION_H__
+#define __NPR_APPLICATION_H__
+
+// INCLUDES
+#include <aknapp.h>
+#include "NPR.hrh"
+
+// UID for the application;
+// this should correspond to the uid defined in the mmp file
+const TUid KUidNPRApp =
+	{
+	_UID3
+	};
+
+// CLASS DECLARATION
+
+/**
+ * CNPRApplication application class.
+ * Provides factory to create concrete document object.
+ * An instance of CNPRApplication is the application part of the
+ * AVKON application framework for the NPR example application.
+ */
+class CNPRApplication : public CAknApplication
+	{
+public:
+	// Functions from base classes
+
+	/**
+	 * From CApaApplication, AppDllUid.
+	 * @return Application's UID (KUidNPRApp).
+	 */
+	TUid AppDllUid() const;
+
+protected:
+	// Functions from base classes
+
+	/**
+	 * From CApaApplication, CreateDocumentL.
+	 * Creates CNPRDocument document object. The returned
+	 * pointer in not owned by the CNPRApplication object.
+	 * @return A pointer to the created document object.
+	 */
+	CApaDocument* CreateDocumentL();
+	};
+
+#endif // __NPR_APPLICATION_H__
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRBrowserAknView.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,55 @@
+/*
+ ===============================================================================
+ Name	: NPRBrowserAknView.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : AknView for containing Nokia browser control to show NPR's Story 
+ ================================================================================
+ */
+
+#ifndef __NPR_BROWSER_AKN_VIEW_H__
+#define __NPR_BROWSER_AKN_VIEW_H__
+
+#include <aknview.h>
+
+class CBrowserContainer;
+class CNPRAppEngine;
+
+class CBrowserAknView : public CAknView
+	{
+public:
+	static CBrowserAknView* NewL(CNPRAppEngine& aEngine);
+ 	virtual ~CBrowserAknView();
+
+public:
+	TUid Id() const;
+	void HandleCommandL(TInt aCommand);
+		
+protected:
+	void DoActivateL(const TVwsViewId& aPrevViewId,	TUid aCustomMessageId, const TDesC8& aCustomMessage);
+	void DoDeactivate();
+	void HandleStatusPaneSizeChange();
+
+private:
+	CBrowserAknView(CNPRAppEngine& aEngine);
+	void ConstructL();
+
+private:	
+	CBrowserContainer*	iContainer;
+	CNPRAppEngine&		iEngine;
+	};
+
+#endif //  __NPR_BROWSER_AKN_VIEW_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRBrowserContainer.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,65 @@
+/*
+ ===============================================================================
+ Name	: NPRBrowserConatiner.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description :  Container for Nokia browser control to show NPR's Story 
+ ================================================================================
+ */
+
+#ifndef __NPR_BROWSER_H__
+#define __NPR_BROWSER_H__
+
+#include <coecntrl.h>
+#include "BrCtlInterface.h"
+
+class CBrowserContainer : public CCoeControl, 
+                          public MCoeControlObserver,
+                          public MBrCtlLoadEventObserver,
+    					  public MEikCommandObserver
+    {
+public:
+	void ConstructL(const TRect& aRect);
+	~CBrowserContainer();
+
+public: 
+	inline CBrCtlInterface* Browser() const {return iBrowser;}
+	void ProcessCommandL(TInt aCommandId);
+	void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
+	TKeyResponse HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+	
+	//From MBrCtlLoadEventObserver
+	void HandleBrowserLoadEventL(TBrCtlDefs::TBrCtlLoadEvent aLoadEvent, TUint aSize, TUint16 aTransactionId);
+	void Listen();
+	
+private:
+	void SizeChanged();
+	TInt CountComponentControls() const;
+	CCoeControl* ComponentControl(TInt aIndex) const;
+	void Draw(const TRect& aRect) const;
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+	void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);
+	void HandleResourceChange(TInt aType);
+   
+private:  	
+	CBrCtlInterface* iBrowser;
+	TUint			 iBrowserCaps;
+	TInt			 iCommandBase;
+	};
+
+#endif // __NPR_BROWSER_H__
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRDocument.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,106 @@
+/*
+ ============================================================================
+ Name	: NPRDocument.h
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : Declares document class for application.
+ ============================================================================
+ */
+ 
+
+#ifndef __NPR_DOCUMENT_H__
+#define __NPR_DOCUMENT_H__
+
+// INCLUDES
+#include <akndoc.h>
+
+#include "NPRStory.h"
+
+// FORWARD DECLARATIONS
+class CNPRAppUi;
+class CEikApplication;
+
+// CLASS DECLARATION
+
+/**
+ * CNPRDocument application class.
+ * An instance of class CNPRDocument is the Document part of the
+ * AVKON application framework for the NPR example application.
+ */
+class CNPRDocument : public CAknDocument
+	{
+public:
+	// Constructors and destructor
+
+	/**
+	 * NewL.
+	 * Two-phased constructor.
+	 * Construct a CNPRDocument for the AVKON application aApp
+	 * using two phase construction, and return a pointer
+	 * to the created object.
+	 * @param aApp Application creating this document.
+	 * @return A pointer to the created instance of CNPRDocument.
+	 */
+	static CNPRDocument* NewL(CEikApplication& aApp);
+
+	/**
+	 * NewLC.
+	 * Two-phased constructor.
+	 * Construct a CNPRDocument for the AVKON application aApp
+	 * using two phase construction, and return a pointer
+	 * to the created object.
+	 * @param aApp Application creating this document.
+	 * @return A pointer to the created instance of CNPRDocument.
+	 */
+	static CNPRDocument* NewLC(CEikApplication& aApp);
+
+	/**
+	 * ~CNPRDocument
+	 * Virtual Destructor.
+	 */
+	virtual ~CNPRDocument();
+
+public:
+	// Functions from base classes
+
+	/**
+	 * CreateAppUiL
+	 * From CEikDocument, CreateAppUiL.
+	 * Create a CNPRAppUi object and return a pointer to it.
+	 * The object returned is owned by the Uikon framework.
+	 * @return Pointer to created instance of AppUi.
+	 */
+	CEikAppUi* CreateAppUiL();
+		
+private:
+	// Constructors
+
+	/**
+	 * ConstructL
+	 * 2nd phase constructor.
+	 */
+	void ConstructL();
+
+	/**
+	 * CNPRDocument.
+	 * C++ default constructor.
+	 * @param aApp Application creating this document.
+	 */
+	CNPRDocument(CEikApplication& aApp);
+	};
+
+#endif // __NPR_DOCUMENT_H__
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRHtmlCreator.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,73 @@
+/*
+ ============================================================================
+ Name	: NPRHtmlCreator.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : HTML composer
+ ============================================================================
+ */
+
+#ifndef _NPR_HTML_CREATOR_H
+#define _NPR_HTML_CREATOR_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <f32file.h>
+
+// CLASS DECLARATION
+class CNPRStory;
+
+/**
+ *  CNPRHtmlCreator
+ * 
+ */
+class CNPRHtmlCreator : public CBase
+	{
+public:
+	/**
+	 * Two-phased constructor.
+	 */
+	static CNPRHtmlCreator* NewL();
+
+	/**
+	 * Two-phased constructor.
+	 */
+	static CNPRHtmlCreator* NewLC();
+	
+	/**
+	 * Destructor.
+	 */
+	~CNPRHtmlCreator();
+
+public:
+	/**
+	 * Create the HTML file in the c:/data/npr directory
+	 */
+	void CreateHtmlFileL(CNPRStory* aStory);
+
+private:
+	/**
+	 * EPOC default constructor for performing 2nd stage construction
+	 */
+	void ConstructL();
+	
+private:
+	//Member variables
+	RFs iFs;
+	static TInt iCurrentImage;
+	};
+
+#endif // _NPR_HTML_CREATOR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRListBox.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,94 @@
+/*
+ ===============================================================================================
+ Name	: NPRListBox.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : Container for Series60 single large style list box to show the NPR's main options
+ ===============================================================================================
+ */
+
+#ifndef NPR_LIST_BOX_H
+#define NPR_LIST_BOX_H
+
+#include <coecntrl.h>		
+#include <akniconutils.h>
+#include <gulicon.h>
+
+class MEikCommandObserver;		
+class CAknSingleLargeStyleListBox;
+class CEikTextListBox;
+
+
+class CNPRListBox : public CCoeControl
+	{
+public: 
+	enum TControls
+		{
+		EListBox,
+		ELastControl
+		};
+	enum TListBoxImages
+		{
+		EListBoxNpr_0xeeb0e481Qgn_menu_nprIndex = 0,
+		EListBoxFirstUserImageIndex
+		};
+public:
+	static CNPRListBox* NewL(const TRect& aRect, const CCoeControl* aParent, MEikCommandObserver* aCommandObserver );
+	static CNPRListBox* NewLC(const TRect& aRect, const CCoeControl* aParent, MEikCommandObserver* aCommandObserver );
+	virtual ~CNPRListBox();
+	
+public:
+	void SendNewsQueryL();
+	// from base class CCoeControl
+	TInt CountComponentControls() const;
+	CCoeControl* ComponentControl(TInt aIndex) const;
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+	void HandleResourceChange(TInt aType);
+	
+protected:
+	// from base class CCoeControl
+	void SizeChanged();
+
+public:
+	TInt CurrentItemIndex();
+	static void AddListBoxItemL(CEikTextListBox* aListBox, const TDesC& aString);
+	static RArray< TInt >* GetSelectedListBoxItemsLC(CEikTextListBox* aListBox);
+	static void DeleteSelectedListBoxItemsL(CEikTextListBox* aListBox);
+	CAknSingleLargeStyleListBox* ListBox();
+	static void CreateListBoxItemL(TDes& aBuffer, TInt aIconIndex, const TDesC& aMainText);
+	void AddListBoxResourceArrayItemL(TInt aResourceId, TInt aIconIndex);
+	void SetupListBoxIconsL();
+	static CGulIcon* LoadAndScaleIconL(const TDesC& aFileName, TInt aBitmapId, TInt aMaskId, TSize* aSize, TScaleMode aScaleMode );
+	TBool HandleMarkableListCommandL( TInt aCommand );
+	
+private:
+	void InitializeControlsL();
+	void LayoutControls();
+
+	// from base class CCoeControl
+	void Draw(const TRect& aRect) const;
+	
+private:
+	// constructors
+	CNPRListBox();
+	void ConstructL(const TRect& aRect, const CCoeControl* aParent, MEikCommandObserver* aCommandObserver);
+	
+private: 
+	CCoeControl* 					iFocusControl;
+	MEikCommandObserver* 			iCommandObserver;
+	CAknSingleLargeStyleListBox* 	iListBox;
+	};
+				
+#endif // NPR_LIST_BOX_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRListBoxView.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,67 @@
+/*
+ ============================================================================
+ Name	: NPRListBoxView.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : AknView for wrapping the container to show the NPR's main options
+ ============================================================================
+ */
+
+#ifndef __NPR_LIST_BOX_VIEW_H__
+#define __NPR_LIST_BOX_VIEW_H__
+
+#include <aknview.h>
+
+class CNPRListBox;
+class CNPRAppEngine;
+
+/**
+ * Avkon view class for NPRListBoxView. It is register with the view server
+ * by the AppUi. It owns the container control.
+ * @class	CNPRListBoxView NPRListBoxView.h
+ */						
+			
+class CNPRListBoxView : public CAknView
+	{
+
+public:
+	static CNPRListBoxView* NewL();
+	static CNPRListBoxView* NewLC();      
+	virtual ~CNPRListBoxView();
+
+public:						
+	// from base class CAknView
+	TUid Id() const;
+	void HandleCommandL( TInt aCommand );
+	
+	CNPRListBox* CreateContainerL();
+protected:
+	// from base class CAknView
+	void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage);
+	void DoDeactivate();
+	void HandleStatusPaneSizeChange();
+	
+private:
+	CNPRListBoxView();
+	void ConstructL();
+
+private:
+	void SetupStatusPaneL();
+	void CleanupStatusPane();
+private:
+	CNPRListBox*	iNPRListBox;
+	};
+
+#endif // __NPR_LIST_BOX_VIEW_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRSearchStationListBox.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,99 @@
+/*
+ ===================================================================================================
+ Name	: NPRSearchStationListBox.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : Container for Series60 single style list box to show the NPR's station search options
+ ===================================================================================================
+ */
+
+#ifndef __NPR_SEARCH_STATION_LISTBOX_H__
+#define __NPR_SEARCH_STATION_LISTBOX_H__
+
+#include <coecntrl.h>		
+class MEikCommandObserver;		
+class CAknSingleLargeStyleListBox;
+class CEikTextListBox;
+
+_LIT(KNPRZipQuery, "zip=%S");
+_LIT(KNPRCurrentLocationZip, "94102");//San Francisco ZIP codes
+
+
+/**
+ * Container class for NPRSearchStationListBox
+ * 
+ * @class	CNPRSearchStationListBox NPRSearchStationListBox.h
+ */
+class CNPRSearchStationListBox : public CCoeControl
+	{
+public: 
+	enum TControls
+		{
+		EListBox,
+		ELastControl
+		};
+	
+	enum TListBoxImages
+		{
+		EListBoxFirstUserImageIndex
+		};
+public:
+	static CNPRSearchStationListBox* NewL(const TRect& aRect, const CCoeControl* aParent, MEikCommandObserver* aCommandObserver);
+	static CNPRSearchStationListBox* NewLC(const TRect& aRect, const CCoeControl* aParent, MEikCommandObserver* aCommandObserver);
+	virtual ~CNPRSearchStationListBox();
+
+public:
+	TInt CurrentItemIndex();
+	void SendStationQueryL();
+	
+	// from base class CCoeControl
+	TInt CountComponentControls() const;
+	CCoeControl* ComponentControl(TInt aIndex) const;
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+	void HandleResourceChange(TInt aType);
+
+	static void AddListBoxItemL(CEikTextListBox* aListBox, const TDesC& aString);
+	static RArray< TInt >* GetSelectedListBoxItemsLC(CEikTextListBox* aListBox);
+	static void DeleteSelectedListBoxItemsL(CEikTextListBox* aListBox);
+	CAknSingleStyleListBox* ListBox();
+	static void CreateListBoxItemL(TDes& aBuffer, TInt aIconIndex, const TDesC& aMainText);
+	void AddListBoxResourceArrayItemL(TInt aResourceId, TInt aIconIndex);
+	void SetupListBoxIconsL();
+	TBool HandleMarkableListCommandL(TInt aCommand);
+	
+protected:
+	// from base class CCoeControl
+	void SizeChanged();
+
+private:
+	// from base class CCoeControl
+	void Draw(const TRect& aRect) const;
+
+private:
+	void InitializeControlsL();
+	void LayoutControls();
+	
+private:
+	// constructors
+	CNPRSearchStationListBox();
+	void ConstructL(const TRect& aRect, const CCoeControl* aParent, MEikCommandObserver* aCommandObserver);
+
+private: 
+	CAknSingleStyleListBox* iListBox;
+	CCoeControl* iFocusControl;
+	MEikCommandObserver* iCommandObserver;
+	};
+				
+#endif // __NPR_SEARCH_STATION_LISTBOX_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRSearchStationListBoxView.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,66 @@
+/*
+ ===================================================================================================
+ Name	: NPRSearchStationListBoxView.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : AknView for wrapping the container to show the NPR's station search options
+ ===================================================================================================
+ */
+
+#ifndef __NPR_SEARCH_STATION_LIST_BOX_VIEW_H__
+#define __NPR_SEARCH_STATION_LIST_BOX_VIEW_H__
+
+#include <aknview.h>
+class CNPRSearchStationListBox;
+
+/**
+ * Avkon view class for NPRSearchStationListBoxView. It is register with the view server
+ * by the AppUi. It owns the container control.
+ * @class	CNPRSearchStationListBoxView NPRSearchStationListBoxView.h
+ */						
+			
+class CNPRSearchStationListBoxView : public CAknView
+	{
+public:
+	static CNPRSearchStationListBoxView* NewL();
+	static CNPRSearchStationListBoxView* NewLC();        
+	virtual ~CNPRSearchStationListBoxView();
+
+public:
+	// from base class CAknView
+	TUid Id() const;
+	void HandleCommandL( TInt aCommand );
+	CNPRSearchStationListBox* CreateContainerL();
+	
+protected:
+	// from base class CAknView
+	void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage);
+	void DoDeactivate();
+	void HandleStatusPaneSizeChange();
+	
+private:
+	void SetupStatusPaneL();
+	void CleanupStatusPane();
+
+private:
+	// constructors
+	CNPRSearchStationListBoxView();
+	void ConstructL();
+
+private:
+	CNPRSearchStationListBox* iNPRSearchStationListBox;
+	};
+
+#endif // __NPR_SEARCH_STATION_LIST_BOX_VIEW_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRStation.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,80 @@
+/*
+ ============================================================================
+ Name	: NPRStation.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : Class to wrap all the Station fields 
+ ============================================================================
+ */
+
+#ifndef __NPR_STATION_H__
+#define __NPR_STATION_H__
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+
+// CLASS DECLARATION
+
+/**
+ *  CNPRStation
+ * 
+ */
+class CNPRStation : public CBase
+	{
+public:
+	/**
+	 * Two-phased constructor.
+	 */
+	static CNPRStation* NewL();
+
+	/**
+	 * Two-phased constructor.
+	 */
+	static CNPRStation* NewLC();
+	
+	/**
+	 * Destructor.
+	 */
+	~CNPRStation();
+
+public:	
+	inline void SetStationId(TInt aId) {iStationId = aId;};
+	inline TInt StationId() {return iStationId;};
+	
+	void SetNameL(const TDesC8& aName);
+	inline const TDesC& Name() {return iName;};
+
+	void SetFrequencyL(const TDesC8& aFrequency);
+	inline const TDesC& Frequency() {return iFrequency;};
+
+	void SetMarketCityL(const TDesC8& aMarketCity);
+	inline const TDesC& MarketCity() {return iMarketCity;};
+		
+private:
+	/**
+	 * EPOC default constructor for performing 2nd stage construction
+	 */
+	void ConstructL();
+	
+private:
+	TInt	iStationId;
+	RBuf	iName;
+	RBuf	iFrequency;
+	RBuf	iMarketCity; 
+	};
+
+#endif // __NPR_STATION_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRStationListBox.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,92 @@
+/*
+ ============================================================================
+ Name	: NPRStationListBox.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : Container for Series60 double style list box to show the NPR's station list
+ ============================================================================
+ */
+
+#ifndef __NPR_STATION_LIST_BOX_H__
+#define __NPR_STATION_LIST_BOX_H__
+
+#include <coecntrl.h>
+
+class MEikCommandObserver;		
+class CAknDoubleStyle2ListBox;
+class CEikTextListBox;
+class CNPRStation;
+
+/**
+ * Container class for NPRStationListBox
+ * 
+ * @class	CNPRStationListBox NPRStationListBox.h
+ */
+class CNPRStationListBox : public CCoeControl
+	{
+public: 
+	enum TControls
+		{
+		EListBox,
+		ELastControl
+		};
+	enum TListBoxImages
+		{
+		EListBoxFirstUserImageIndex
+		};
+public:
+	static CNPRStationListBox* NewL(const TRect& aRect, const CCoeControl* aParent, MEikCommandObserver* aCommandObserver);
+	static CNPRStationListBox* NewLC(const TRect& aRect, const CCoeControl* aParent, MEikCommandObserver* aCommandObserver);
+	virtual ~CNPRStationListBox();
+
+public:
+	void Listen();
+	// from base class CCoeControl
+	TInt CountComponentControls() const;
+	CCoeControl* ComponentControl(TInt aIndex) const;
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+	void HandleResourceChange(TInt aType);
+	static void AddListBoxItemL(CEikTextListBox* aListBox, const TDesC& aString);
+	static RArray< TInt >* GetSelectedListBoxItemsLC( CEikTextListBox* aListBox);
+	static void DeleteSelectedListBoxItemsL(CEikTextListBox* aListBox);
+	CAknDoubleStyle2ListBox* ListBox();
+	static void CreateListBoxItemL(TDes& aBuffer, const TDesC& aMainText, const TDesC& aSecondaryText);
+	void AddListBoxResourceArrayItemL(TInt aResourceId);
+	void SetupListBoxIconsL();
+	TBool HandleMarkableListCommandL(TInt aCommand);
+
+protected:
+	// from base class CCoeControl
+	void SizeChanged();
+
+private:
+	void InitializeControlsL();
+	void LayoutControls();
+	// from base class CCoeControl
+	void Draw( const TRect& aRect ) const;
+
+private:
+	// constructors
+	CNPRStationListBox();
+	void ConstructL(const TRect& aRect, const CCoeControl* aParent, MEikCommandObserver* aCommandObserver);
+
+private: 
+	CAknDoubleStyle2ListBox* 			iListBox;
+	const RPointerArray<CNPRStation>* 	iStationArray;
+	CCoeControl* 						iFocusControl;
+	MEikCommandObserver* 				iCommandObserver;
+	};
+				
+#endif // __NPR_STATION_LIST_BOX_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRStationListBoxView.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,66 @@
+/*
+ ==========================================================================================
+ Name	: NPRStationListBoxView.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description :  AknView for wrapping the container to show the NPR's station list
+ ==========================================================================================
+ */
+
+#ifndef __NPR_STATION_LIST_BOX_VIEW_H__
+#define __NPR_STATION_LIST_BOX_VIEW_H__
+
+#include <aknview.h>
+class CNPRStationListBox;
+
+/**
+ * Avkon view class for NPRStationListBoxView. It is register with the view server
+ * by the AppUi. It owns the container control.
+ * @class	CNPRStationListBoxView NPRStationListBoxView.h
+ */						
+			
+class CNPRStationListBoxView : public CAknView
+	{
+public:
+	static CNPRStationListBoxView* NewL();
+	static CNPRStationListBoxView* NewLC();        
+	virtual ~CNPRStationListBoxView();
+
+public:	
+	// from base class CAknView
+	TUid Id() const;
+	void HandleCommandL( TInt aCommand );
+	CNPRStationListBox* CreateContainerL();
+	
+protected:
+	// from base class CAknView
+	void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage);
+	void DoDeactivate();
+	void HandleStatusPaneSizeChange();
+	
+private:
+	void SetupStatusPaneL();
+	void CleanupStatusPane();
+
+private:
+	// constructors
+	CNPRStationListBoxView();
+	void ConstructL();
+
+private:
+	CNPRStationListBox* iNPRStationListBox;
+	};
+
+#endif // __NPR_STATION_LIST_BOX_VIEW_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRStationXmlParser.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,86 @@
+/*
+ ============================================================================
+ Name	: NPRStationXmlParser.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : Station xml parser
+ ============================================================================
+ */
+
+#ifndef __NPR_STATION_XML_PARSER_H__
+#define __NPR_STATION_XML_PARSER_H__
+
+// INCLUDES
+#include <Xml/ContentHandler.h>
+
+#include "NPRStation.h"
+
+using namespace Xml;
+// CLASS DECLARATION
+
+/**
+ *  CNPRStationXmlParser
+ * The SAX parser will use this handler and associated enums to create story objects.  
+ */
+
+// used by SAX parser. States of the XML response from NPR server. 
+enum TNPRStationParserState
+		{
+        ENPRStationStateIdle = 0,
+        ENPRStationStateStation,
+        ENPRStationStateStationEnd,
+        ENPRStationStateName,
+        ENPRStationStateNameEnd,
+        ENPRStationStateFrequency,
+        ENPRStationStateFrequencyEnd,
+        ENPRStationStateMarketCity,
+        ENPRStationStateMarketCityEnd
+		};
+
+class CNPRStationXmlParser : public CBase, public MContentHandler
+	{
+public:
+	static CNPRStationXmlParser* NewL(RPointerArray<CNPRStation>* aStationArray);
+	static CNPRStationXmlParser* NewLC(RPointerArray<CNPRStation>* aStationArray);
+	~CNPRStationXmlParser();
+
+public:
+	void OnStartDocumentL(const RDocumentParameters& aDocParam, TInt aErrorCode); 
+	void OnEndDocumentL(TInt aErrorCode); 
+	void OnStartElementL(const RTagInfo& aElement, const RAttributeArray& aAttributes, TInt aErrorCode);
+	void OnEndElementL(const RTagInfo& aElement, TInt aErrorCode);
+	void OnContentL(const TDesC8& aBytes, TInt aErrorCode);
+	void OnStartPrefixMappingL(const RString& aPrefix, const RString& aUri, TInt aErrorCode);
+	void OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode);
+	void OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode);
+	void OnSkippedEntityL(const RString& aName, TInt aErrorCode);
+	void OnProcessingInstructionL(const TDesC8& aTarget, const TDesC8& aData, TInt aErrorCode);
+	void OnError(TInt aErrorCode);
+	TAny* GetExtendedInterface(const TInt32 aUid);
+
+private:
+	HBufC* Copy8To16LC(const TDesC8& aDes);
+	
+private:
+	CNPRStationXmlParser(RPointerArray<CNPRStation>* aStationArray);
+	void ConstructL();
+
+private:
+	CNPRStation 				*iCurrentStation; 
+	TNPRStationParserState		iState;
+	RPointerArray<CNPRStation>* iStationArray; //it doesn't take ownership, do not delete
+	};
+
+#endif // __NPR_STATION_XML_PARSER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRStory.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,73 @@
+/*
+ ============================================================================
+ Name	: NPRStory.h
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : NPR's xml story parser
+ ============================================================================
+ */
+
+#ifndef __NPR_STORY_H__
+#define __NPR_STORY_H__
+
+// INCLUDES
+#include <e32base.h>
+
+/**
+ *  CNPRStory
+ * 
+ */
+class CNPRStory : public CBase
+	{
+public:
+	static CNPRStory* NewL();
+	static CNPRStory* NewLC();
+	~CNPRStory();
+
+public:	
+	void SetStoryId(TInt aStoryId) {iStoryId = aStoryId;}
+	inline TInt StoryId() {return iStoryId;} 
+
+	void SetTitleL(const TDesC8& aTitle);
+	inline const TDesC& Title() {return iTitle;};
+	
+	void SetTeaserL(const TDesC8& aTeaser);
+	inline const TDesC& Teaser() {return iTeaser;};
+
+	void SetTextL(const TDesC8& aText);
+	inline const TDesC& Text() {return iText;};	
+	
+	void SetMp3UrlL(const TDesC8& aMp3Url);
+	inline const TDesC& Mp3Url() {return iMp3Url;};
+	
+	void SetThumbnailUrlL(const TDesC8& aThumbUrl);
+	inline const TDesC& ThumbnailUrl() {return iThumbnailUrl;};
+	
+private:
+	//Constructors
+	CNPRStory();
+	void ConstructL();
+
+private:
+	TInt iStoryId; 
+	RBuf iTitle;
+	RBuf iTeaser;
+	RBuf iText;
+	RBuf iMp3Url; 
+	RBuf iThumbnailUrl;
+	};
+
+#endif // __NPR_STORY_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRStoryListBox.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,100 @@
+/*
+ ============================================================================
+ Name	: NPRStoryListBox.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : Container for Series60 double style list box to show the NPR's story list
+ ============================================================================
+ */
+
+#ifndef __NPR_STORY_LIST_BOX_H__
+#define __NPR_STORY_LIST_BOX_H__
+
+#include <coecntrl.h>
+#include <gulicon.h>
+
+
+class MEikCommandObserver;		
+class CAknDoubleLargeStyleListBox;
+class CEikTextListBox;
+class CNPRStory;
+class CNPRHtmlCreator;
+
+/**
+ * Container class for NPRStoryListBox
+ * 
+ * @class	CNPRStoryListBox NPRStoryListBox.h
+ */
+class CNPRStoryListBox : public CCoeControl
+	{
+public: 
+	enum TControls
+		{
+		EListBox,
+		ELastControl
+		};
+	enum TListBoxImages
+		{
+		EListBoxFirstUserImageIndex
+		};
+	
+public:
+	static CNPRStoryListBox* NewL(const TRect& aRect, const CCoeControl* aParent, MEikCommandObserver* aCommandObserver);
+	static CNPRStoryListBox* NewLC(const TRect& aRect, const CCoeControl* aParent, MEikCommandObserver* aCommandObserver);
+	virtual ~CNPRStoryListBox();
+
+public:
+	void ShowSelectedStoryL();
+	// from base class CCoeControl
+	TInt CountComponentControls() const;
+	CCoeControl* ComponentControl(TInt aIndex) const;
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+	void HandleResourceChange(TInt aType);
+	static void AddListBoxItemL(CEikTextListBox* aListBox, const TDesC& aString);
+	static RArray< TInt >* GetSelectedListBoxItemsLC(CEikTextListBox* aListBox);
+	static void DeleteSelectedListBoxItemsL(CEikTextListBox* aListBox);
+	CAknDoubleLargeStyleListBox* ListBox();
+	static void CreateListBoxItemL(TDes& aBuffer, TInt aIconIndex, const TDesC& aMainText, const TDesC& aSecondaryText);
+	void AddListBoxResourceArrayItemL(TInt aResourceId, TInt aIconIndex);
+	void SetupListBoxIconsL();
+	TBool HandleMarkableListCommandL(TInt aCommand);
+	static CGulIcon* LoadAndScaleIconL(const TDesC& aFileName, TInt aBitmapId, TInt aMaskId, TSize* aSize, TScaleMode aScaleMode);
+	
+protected:
+	// from base class CCoeControl
+	void SizeChanged();
+
+private:
+	TInt CurrentItemIndex();
+	void InitializeControlsL();
+	void LayoutControls();
+
+	// from base class CCoeControl
+	void Draw( const TRect& aRect ) const;
+
+private:
+	// constructors
+	CNPRStoryListBox();
+	void ConstructL(const TRect& aRect, const CCoeControl* aParent, MEikCommandObserver* aCommandObserver);
+	
+private: 
+	CCoeControl* 					iFocusControl;
+	MEikCommandObserver*			iCommandObserver;
+	CAknDoubleLargeStyleListBox* 	iListBox;
+	const RPointerArray<CNPRStory>* iStoryArray;
+	CNPRHtmlCreator* 				iHtmlCreator;
+	};
+				
+#endif // __NPR_STORY_LIST_BOX_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRStoryListBoxView.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,66 @@
+/*
+ ==========================================================================================
+ Name	: NPRStoryListBoxView.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description :  AknView for wrapping the container to show the NPR's story list
+ ==========================================================================================
+ */
+
+#ifndef __NPR_STORY_LIST_BOX_VIEW_H__
+#define __NPR_STORY_LIST_BOX_VIEW_H__
+
+#include <aknview.h>
+
+class CNPRStoryListBox;
+
+/**
+ * Avkon view class for NPRStoryListBoxView. It is register with the view server
+ * by the AppUi. It owns the container control.
+ * @class	CNPRStoryListBoxView NPRStoryListBoxView.h
+ */									
+class CNPRStoryListBoxView : public CAknView
+	{
+public:
+	static CNPRStoryListBoxView* NewL();
+	static CNPRStoryListBoxView* NewLC();        
+	virtual ~CNPRStoryListBoxView();
+
+public:	
+	// from base class CAknView
+	TUid Id() const;
+	void HandleCommandL(TInt aCommand);
+	CNPRStoryListBox* CreateContainerL();
+
+protected:
+	// from base class CAknView
+	void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage);
+	void DoDeactivate();
+	void HandleStatusPaneSizeChange();
+
+private:
+	void SetupStatusPaneL();
+	void CleanupStatusPane();
+	
+private:
+	// constructors
+	CNPRStoryListBoxView();
+	void ConstructL();
+
+private:
+	CNPRStoryListBox* iNPRStoryListBox;	
+	};
+
+#endif // __NPR_STORY_LIST_BOX_VIEW_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/NPRStoryXmlParser.h	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,95 @@
+/*
+ ============================================================================
+ Name	: NPRStoryXmlParser.h
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution
+ - Symsource
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : Story xml parser
+ ============================================================================
+ */
+
+#ifndef __NPR_STORY_XML_PARSER_H__
+#define __NPR_STORY_XML_PARSER_H__
+
+// INCLUDES
+#include <Xml/ContentHandler.h>
+#include <Xml/Parser.h>
+
+#include "NPRStory.h"
+
+using namespace Xml;
+
+/**
+ *  CNPRStoryXmlParser
+ * The SAX parser will use this handler and associated enums to create story objects.  
+ */
+
+// used by SAX parser. States of the XML response from NPR server. 
+enum TNPRNewsState
+		{
+		ENPRNewsStateIdle = 0,
+        ENPRNewsStateStory,
+        ENPRNewsStateTitle,
+        ENPRNewsStateTeaser,
+        ENPRNewsStateThumbnail,
+        ENPRNewsStateMedium,
+        ENPRNewsStateText,
+        ENPRNewsStateParagraph,
+        ENPRNewsStateDate,
+        ENPRNewsStateAudio,
+        ENPRNewsStateAudioMp3,
+        ENPRNewsStateAudioReal,
+        ENPRNewsStateAudioWM,
+		};
+
+class CNPRStoryXmlParser : public CBase, public MContentHandler
+	{
+public:
+	static CNPRStoryXmlParser* NewL(RPointerArray<CNPRStory>* aStoryArray);
+	static CNPRStoryXmlParser* NewLC(RPointerArray<CNPRStory>* aStoryArray);
+	~CNPRStoryXmlParser();
+
+public:
+	void OnStartDocumentL(const RDocumentParameters& aDocParam, TInt aErrorCode); 
+	void OnEndDocumentL(TInt aErrorCode); 
+	void OnStartElementL(const RTagInfo& aElement, const RAttributeArray& aAttributes, TInt aErrorCode);
+	void OnEndElementL(const RTagInfo& aElement, TInt aErrorCode);
+	void OnContentL(const TDesC8& aBytes, TInt aErrorCode);
+	void OnStartPrefixMappingL(const RString& aPrefix, const RString& aUri, TInt aErrorCode);
+	void OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode);
+	void OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode);
+	void OnSkippedEntityL(const RString& aName, TInt aErrorCode);
+	void OnProcessingInstructionL(const TDesC8& aTarget, const TDesC8& aData, TInt aErrorCode);
+	void OnError(TInt aErrorCode);
+	TAny* GetExtendedInterface(const TInt32 aUid) ;
+	
+private:
+	// Constructors and destructor
+	HBufC* Copy8To16LC(const TDesC8& aDes);
+	
+private:
+	CNPRStoryXmlParser(RPointerArray<CNPRStory>* aStoryArray);
+	void ConstructL();
+	
+private:
+	CNPRStory*					iCurrentStory; 
+	TNPRNewsState 				iState;
+	RPointerArray<CNPRStory>* 	iStoryArray; //it doesn't take ownership, do not delete
+	HBufC8* 					iTagName;
+	TBool 						iStory;
+	};
+
+#endif // __NPR_STORY_XML_PARSER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sis/NPR_S60_3_X_v_1_0_0.pkg	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,47 @@
+; Installation file for NPR application
+;
+; This is an auto-generated PKG file by Carbide.
+; This file uses variables specific to Carbide builds that will not work
+; on command-line builds. If you want to use this generated PKG file from the
+; command-line tools you will need to modify the variables with the appropriate
+; values: $(EPOCROOT), $(PLATFORM), $(TARGET)
+;
+;Language - standard language definitions
+&EN
+
+; standard SIS file header
+#{"NPR"},(0xEEB0E481),1,0,0
+
+;Localised Vendor name
+%{"Symbian Foundation"}
+
+;Unique Vendor name
+:"Symbian Foundation"
+
+;Supports Series 60 v 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+;Files to install
+;You should change the source paths to match that of your environment
+;<source> <destination>
+"$(EPOCROOT)Epoc32\release\$(PLATFORM)\$(TARGET)\NPR_0xEEB0E481.exe"		-"!:\sys\bin\NPR_0xEEB0E481.exe"
+"$(EPOCROOT)Epoc32\data\z\resource\apps\NPR_0xEEB0E481.rsc"		-"!:\resource\apps\NPR_0xEEB0E481.rsc"
+"$(EPOCROOT)Epoc32\data\z\private\10003a3f\apps\NPR_0xEEB0E481_reg.rsc"	-"!:\private\10003a3f\import\apps\NPR_0xEEB0E481_reg.rsc"
+"$(EPOCROOT)Epoc32\data\z\resource\apps\NPR_0xEEB0E481.mif" -"!:\resource\apps\NPR_0xEEB0E481.mif"
+"..\help\NPR_0xEEB0E481.hlp"							 -"!:\resource\help\NPR_0xEEB0E481.hlp"
+"$(EPOCROOT)Epoc32\data\z\resource\apps\list_icons.mbm" -"!:\resource\apps\list_icons.mbm"
+
+; Add any installation notes if applicable
+;"NPR.txt"		-"!:\private\EEB0E481\NPR.txt"
+"..\testdata\pic1.jpg" -"c:\data\npr\pic1.jpg"
+"..\testdata\pic2.jpg" -"c:\data\npr\pic2.jpg"
+"..\testdata\pic3.jpg" -"c:\data\npr\pic3.jpg"
+"..\testdata\pic4.jpg" -"c:\data\npr\pic4.jpg"
+"..\testdata\pic5.jpg" -"c:\data\npr\pic5.jpg"
+"..\testdata\pic6.jpg" -"c:\data\npr\pic6.jpg"
+
+;required for application to be covered by backup/restore facility 
+"..\sis\backup_registration.xml"		-"!:\private\EEB0E481\backup_registration.xml"
+"..\data\npr_news_stream.rm" -"!:\data\npr_news_stream.rm"
+"..\data\npr_station_stream.rm" -"!:\data\npr_station_stream.rm"
+
Binary file sis/NPR_S60_3_X_v_1_0_0.sis has changed
Binary file sis/NPR_S60_3_X_v_1_0_0.sisx has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sis/backup_registration.xml	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,5 @@
+<?xml version="1.0" standalone="yes"?>
+<backup_registration>
+  <system_backup/>
+  <restore requires_reboot = "no"/>
+</backup_registration>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HttpClient.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,278 @@
+/*
+ ============================================================================
+ Name	: HttpClient.cpp
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : Web client 
+ ============================================================================
+ */
+
+#include <activeapdb.h>
+#include <HttpStringConstants.h>  // HTTP
+
+#include "HttpClient.h"
+
+// HTTP header values
+_LIT8(KUserAgent, "NPR 1.0");		// Name of the client app.
+_LIT8(KAccept, "text/*");	// Accept any (but only) text content (errors may not be sent as "text/x-visto-ota-activation").
+
+CHttpClient* CHttpClient::NewL(MHTTPObserver& aObserver)
+	{
+	CHttpClient* self = new (ELeave)CHttpClient(aObserver);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+CHttpClient::CHttpClient(MHTTPObserver& aObserver)
+	:iObserver(aObserver)
+	{
+	}
+
+CHttpClient::~CHttpClient()
+	{
+	if (iTransactionActive)
+		{
+		iHttpTransaction.Cancel();
+		iTransactionActive = EFalse;
+		}
+
+	iHTTPSession.Close();
+	iConnection.Close();
+	iSocketServ.Close();
+	delete iResponseBuffer;
+	delete iUri;
+	}
+
+void CHttpClient::ConstructL()
+	{
+	// Open the Http session
+	iHTTPSession.OpenL();
+    User::LeaveIfError(iSocketServ.Connect());
+    User::LeaveIfError(iConnection.Open(iSocketServ));
+    User::LeaveIfError(iConnection.Start());
+	}
+
+
+void CHttpClient::SendRequestL(const TDesC& aUri)
+	{
+	if(iUri)
+		{
+		delete iUri;
+		iUri = NULL;
+		}
+	
+	iUri = HBufC8::NewL(aUri.Length());
+	TPtr8 uriPtr = iUri->Des();
+	uriPtr.Copy(aUri);
+
+	TUriParser8 uriParser;
+	User::LeaveIfError(uriParser.Parse(uriPtr));
+	
+	TBuf8<256> buf;
+	buf.Copy(uriParser.UriDes());
+			
+	RStringPool strPool = iHTTPSession.StringPool();
+	iHttpConnInfo = iHTTPSession.ConnectionInfo();
+	iHttpConnInfo.SetPropertyL(strPool.StringF(HTTP::EHttpSocketServ, RHTTPSession::GetTable() ), THTTPHdrVal(iSocketServ.Handle()));
+	iHttpConnInfo.SetPropertyL(strPool.StringF(HTTP::EHttpSocketConnection, RHTTPSession::GetTable() ),THTTPHdrVal (REINTERPRET_CAST(TInt, &(iConnection))));
+	
+	if(iTransactionActive)
+		{
+		iHttpTransaction.Cancel();
+		iHttpTransaction.Close();
+		iTransactionActive = EFalse;
+		}
+
+	// Create transaction
+	iHttpTransaction = iHTTPSession.OpenTransactionL(
+		uriParser, 
+		*this,
+		iHTTPSession.StringPool().StringF(HTTP::EPOST, RHTTPSession::GetTable()));
+	iTransactionActive = ETrue;
+	
+	
+	// Set transaction headers.
+	RHTTPHeaders headers = iHttpTransaction.Request().GetHeaderCollection();
+	AddHeaderL(headers, HTTP::EUserAgent, KUserAgent);
+	AddHeaderL(headers, HTTP::EAccept, KAccept);
+	
+	// Delete any previous response.
+	delete iResponseBuffer;
+	iResponseBuffer = NULL;
+	
+	// Set the body.
+	iHttpTransaction.Request().SetBody(*this);
+	
+	// Submit the request
+	iHttpTransaction.SubmitL();
+	}
+
+/**
+* Add a header to a header set
+*
+* @param aHeaders The header set to be modified
+* @param aHeaderField The name of the header to be added
+* @param aHeaderValue The value for the header to be added
+*/
+void CHttpClient::AddHeaderL(RHTTPHeaders aHeaders,
+								TInt aHeaderField,
+								const TDesC8& aHeaderValue)
+	{
+	RStringPool stringPool = iHTTPSession.StringPool();	// Do not close this session here.
+	RStringF valStr = stringPool.OpenFStringL(aHeaderValue);
+	CleanupClosePushL(valStr);
+	THTTPHdrVal headerVal(valStr);
+	aHeaders.SetFieldL(stringPool.StringF(aHeaderField, RHTTPSession::GetTable()), headerVal);
+	CleanupStack::PopAndDestroy();	// valStr
+	}
+
+/**
+ * Add a header to a header set
+ *
+ * @param aHeaders The header set to be modified
+ * @param aHeaderField The name of the header to be added
+ * @param aHeaderValue The value for the header to be added
+ * @param aExtensionValue The extension value for the header
+ */
+void CHttpClient::AddHeaderL(RHTTPHeaders aHeaders, 
+								TInt aHeaderField, 
+								const TDesC8& aHeaderValue,
+								TInt aExtensionField,
+								const TDesC8& aExtensionValue)
+	{
+	RStringPool stringPool = iHTTPSession.StringPool();	// Do not close this session here.
+	RStringF valStr = stringPool.OpenFStringL(aHeaderValue);
+	CleanupClosePushL(valStr);
+	THTTPHdrVal headerVal(valStr);
+	RStringF extensionStr = stringPool.OpenFStringL(aExtensionValue);
+	CleanupClosePushL(extensionStr);
+	THTTPHdrVal extensionVal(extensionStr);
+	aHeaders.SetFieldL(
+		stringPool.StringF(aHeaderField, RHTTPSession::GetTable()), 
+		headerVal,
+		stringPool.StringF(aExtensionField, RHTTPSession::GetTable()),
+		extensionVal);
+	CleanupStack::PopAndDestroy(2);	// extensionStr, valStr
+	}
+
+void CHttpClient::MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent &aEvent)
+	{
+	switch (aEvent.iStatus){
+		case THTTPEvent::EGotResponseHeaders:
+			{
+			// HTTP response headers have been received.
+			// Pass status information to observer.
+			RHTTPResponse resp = aTransaction.Response();
+			// Get status code
+			TInt statusCode = resp.StatusCode();
+
+			// Get status text
+			RStringF statusStr = resp.StatusText();
+			HBufC* statusBuf = HBufC::NewLC(statusStr.DesC().Length());
+			statusBuf->Des().Copy(statusStr.DesC());
+
+			// Inform observer
+			iObserver.ResponseStatusL(statusCode, *statusBuf);
+
+			CleanupStack::PopAndDestroy(statusBuf);
+			break;
+			}
+	    case THTTPEvent::EGotResponseBodyData:
+	    	{
+			// Get text of response body
+			MHTTPDataSupplier* dataSupplier = aTransaction.Response().Body();
+			TPtrC8 ptr;
+			dataSupplier->GetNextDataPart(ptr);
+
+			// Append to iResponseBuffer
+			if (!iResponseBuffer)
+				{
+				iResponseBuffer = ptr.AllocL();
+				}
+			else
+				{
+				iResponseBuffer = iResponseBuffer->ReAllocL(iResponseBuffer->Length() + ptr.Length());
+				iResponseBuffer->Des().Append(ptr);
+				}
+
+			// Release the body data
+			dataSupplier->ReleaseData();
+			break;
+			}
+	    case THTTPEvent::EResponseComplete:
+			iObserver.ResponseReceivedL(*iResponseBuffer);
+	    	break;
+	    case THTTPEvent::ESucceeded:
+	    case THTTPEvent::EFailed:
+	    	{
+	    	aTransaction.Close();
+			iTransactionActive = EFalse;
+	    	break;
+	    	}
+		case THTTPEvent::ERedirectedPermanently:
+			break;
+		case THTTPEvent::ERedirectedTemporarily:
+			break;
+		default:
+			{
+			if (aEvent.iStatus < 0)
+				{
+				aTransaction.Close();
+				iTransactionActive = EFalse;
+				}
+			break;
+			}
+		}
+	}
+
+TInt CHttpClient::MHFRunError(TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& /*aEvent*/)
+	{
+	if(!aError)
+		{
+		aTransaction.Close();
+		iTransactionActive = EFalse;
+		}
+	return KErrNone;
+	}
+
+TBool CHttpClient::GetNextDataPart(TPtrC8& /*aDataPart*/)
+	{
+	// Not implemented for now as assuming that chunked response won't be sent 
+	// by the server
+	return ETrue;
+	}
+
+void CHttpClient::ReleaseData()
+	{
+	// Not implemented for now as assuming that chunked response won't be sent 
+	// by the server
+	}
+
+TInt CHttpClient::OverallDataSize()
+	{
+	// Not implemented for now as assuming that chunked response won't be sent 
+	// by the server
+	return 0;
+	}
+
+TInt CHttpClient::Reset()
+	{
+	// Not implemented for now as assuming that chunked response won't be sent 
+	// by the server
+	return KErrNone;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPR.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,32 @@
+/*
+ ============================================================================
+ Name		: NPR.cpp
+ Author	  : John Kern
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors: John Kern
+Description : Main application class
+ ============================================================================
+ */
+
+// INCLUDE FILES
+#include <eikstart.h>
+#include "NPRApplication.h"
+
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new CNPRApplication;
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication(NewApplication);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRAppEngine.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,226 @@
+/*
+ ============================================================================
+ Name	: NPRAppEngine.cpp
+ Author	: Symsourcce
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description :
+ ============================================================================
+ */
+
+#include <DocumentHandler.h>
+#include <aknwaitdialog.h>
+#include <NPR_0xEEB0E481.rsg>
+
+#include "NPRAppEngine.h"
+#include "NPRAppUi.h"
+#include "NPRStationXmlParser.h"
+#include "NPRStation.h"
+#include "NPRStory.h"
+
+_LIT(KNPRQuery, "http://api.npr.org/query?id=1001&apiKey=MDAzNTk1Nzk0MDEyNDQ2NjI1NzgyNGExNg001");
+_LIT(KNPRApiKey, "MDAzNTk1Nzk0MDEyNDQ2NjI1NzgyNGExNg001");
+_LIT(KNPRStationQuery,"http://api.npr.org/stations?%S&apiKey=%S");
+_LIT(KSearching, "Searching...");
+
+_LIT(KStationStreamFile, "c:\\data\\npr_station_stream.rm");
+_LIT(KNewsStreamFile, "c:\\data\\npr_news_stream.rm");
+
+_LIT8(KDataTypeRAM,"audio/x-pn-realaudio-plugin");
+_LIT8(KXmlMimeType, "text/xml");
+
+
+CNPRAppEngine* CNPRAppEngine::NewL(CNPRAppUi& aNPRAppUi)
+	{	
+	CNPRAppEngine* self = new (ELeave) CNPRAppEngine(aNPRAppUi);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CNPRAppEngine::CNPRAppEngine(CNPRAppUi& aNPRAppUi)
+	:iNPRAppUi(aNPRAppUi)
+	{
+	}
+
+CNPRAppEngine::~CNPRAppEngine()
+	{
+	delete iDocHandler;
+	delete iHttp;
+	iStationArray.ResetAndDestroy();
+	iStationArray.Close();
+	iStoryArray.ResetAndDestroy();
+	iStoryArray.Close();
+	if(iWaitDialog)
+		{		
+	    delete iWaitDialog;
+	    iWaitDialog = NULL;
+		}
+	}
+
+void CNPRAppEngine::ConstructL()
+	{
+	this->iHttp = CHttpClient::NewL(*this);
+    // Create the document handler
+    iDocHandler = CDocumentHandler::NewL(CEikonEnv::Static()->Process());
+	}
+
+
+void CNPRAppEngine::SendNPRCommandL(const TNPRCommands aCommand, const TDesC& aField)
+	{
+	switch(aCommand)
+		{
+		case ENewsCmd:
+			{
+			SearchNewsL(aField);
+			ShowWaitingDialogL(KSearching());
+			break;
+			}
+		case EStationsCmd:
+			{
+			SearchStationsL(aField);
+			ShowWaitingDialogL(KSearching());
+			break;
+			}
+		case EPlayStationStream:
+			{
+			TFileName filename(KStationStreamFile);
+			LaunchFileL(filename);
+			break;
+			}
+		case EPlayNewsStream:
+			{
+			TFileName filename(KNewsStreamFile);
+			LaunchFileL(filename);
+			break;
+			}
+		default:
+			return;
+		}
+	}
+
+const RPointerArray<CNPRStation>* CNPRAppEngine::Stations()
+	{
+	return &iStationArray;
+	}
+
+const RPointerArray<CNPRStory>* CNPRAppEngine::Stories()
+	{
+	return &iStoryArray;
+	}
+
+void CNPRAppEngine::SearchStationsL(const TDesC& aField)
+	{
+	HBufC *uri = HBufC::NewLC(KNPRStationQuery().Length()
+			+ aField.Length() 
+			+ KNPRApiKey().Length()
+			);
+	TPtr uriPtr = uri->Des();
+	uriPtr.Format(KNPRStationQuery,&aField, &KNPRApiKey());
+	iHttp->SendRequestL(uriPtr);
+	CleanupStack::PopAndDestroy(uri);
+	iNPRCommand = EStationsCmd;
+	}
+
+void CNPRAppEngine::SearchNewsL(const TDesC& /*aField*/)
+	{
+	iHttp->SendRequestL(KNPRQuery());
+	iNPRCommand = ENewsCmd;
+	}
+
+void CNPRAppEngine::ResponseStatusL(TInt /*aStatusCode*/, const TDesC& /*aStatusText*/)
+	{
+	DismissWaitingDialogL();
+	}
+
+void CNPRAppEngine::ResponseReceivedL(const TDesC8& aResponseBuffer)
+	{
+	switch(iNPRCommand)
+		{
+		case ENewsCmd:
+			{
+			iStoryArray.ResetAndDestroy();
+			CNPRStoryXmlParser* newsParser = CNPRStoryXmlParser::NewLC(&iStoryArray);
+			CParser* parser = CParser::NewLC(KXmlMimeType, *newsParser);
+			parser->ParseL(aResponseBuffer);
+			CleanupStack::PopAndDestroy(parser); 
+			CleanupStack::PopAndDestroy(newsParser);
+			iNPRAppUi.ActivateLocalViewL(TUid::Uid(ENPRStoryListBoxViewId));
+			break;
+			}
+		case EStationsCmd:
+			{
+			DismissWaitingDialogL();
+			iStationArray.ResetAndDestroy();
+			CNPRStationXmlParser* stationParser = CNPRStationXmlParser::NewLC(&iStationArray);
+			CParser* parser = CParser::NewLC(KXmlMimeType, *stationParser);
+			parser->ParseL(aResponseBuffer);
+			CleanupStack::PopAndDestroy(parser); 
+			CleanupStack::PopAndDestroy(stationParser);
+			iNPRAppUi.ActivateLocalViewL(TUid::Uid(ENPRStationListBoxViewId));
+			break;
+			}
+		default:
+			DismissWaitingDialogL();
+			break;
+		}
+	}
+
+void CNPRAppEngine::LaunchFileL(const TDesC& aFilename)
+    {
+    TDataType dataType = TDataType(KDataTypeRAM());
+    // Open a file in a standalone handler application
+    TRAPD(err,iDocHandler->OpenFileL(aFilename, dataType));
+ 
+    TUid handlerUid; 
+    err = iDocHandler->HandlerAppUid(handlerUid);
+    if (!err)
+        {
+        RefreshDocumentFileL(handlerUid, aFilename);
+        }
+    }
+
+/**
+ * Refreshes the file opened in a standalone handler. Does nothing if the file
+ * has not been already opened.
+ */
+void CNPRAppEngine::RefreshDocumentFileL(const TUid& aUid, const TDesC& aFileName)
+    {
+    TApaTaskList taskList(CEikonEnv::Static()->WsSession());
+    TApaTask task = taskList.FindApp(aUid);
+ 
+    // If the standalone handler is already running, then update the file
+    if (task.Exists())
+        {
+        User::LeaveIfError(task.SwitchOpenFile(aFileName));
+        }
+    }
+
+void CNPRAppEngine::ShowWaitingDialogL(const TDesC& aText)
+	{
+	DismissWaitingDialogL();
+	iWaitDialog = new(ELeave)CAknWaitDialog((REINTERPRET_CAST(CEikDialog**,&iWaitDialog)), EFalse );
+	iWaitDialog->SetTextL(aText); 
+	iWaitDialog->ExecuteLD(R_SINGULAR_WAIT_NOTE);
+	}
+
+void CNPRAppEngine::DismissWaitingDialogL()
+	{
+	if(iWaitDialog)
+		{			
+		iWaitDialog->ProcessFinishedL();
+		iWaitDialog=NULL;
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRAppUi.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,194 @@
+/*
+ ============================================================================
+ Name	: NPRAppUi.cpp
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ - Symsource
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : CNPRAppUi implementation
+ ============================================================================
+ */
+
+// INCLUDE FILES
+#include <aknmessagequerydialog.h>
+#include <s32file.h>
+#include <Xml/Parser.h> 
+#include <NPR_0xEEB0E481.rsg>
+
+#include "NPR_0xEEB0E481.hlp.hrh"
+#include "NPR.hrh"
+#include "NPR.pan"
+#include "NPRApplication.h"
+#include "NPRAppUi.h"
+#include "NPRAppEngine.h"
+#include "NPRListBoxView.h"
+#include "NPRStoryListBoxView.h"
+#include "NPRStationListBoxView.h"
+#include "NPRSearchStationListBoxView.h"
+#include "NPRBrowserAknView.h"
+
+
+_LIT( KFileName, "C:\\private\\EEB0E481\\NPR.txt" );
+_LIT( KText, "Hello World!");
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// CNPRAppUi::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CNPRAppUi::ConstructL()
+	{
+	// Initialise app UI with standard value.
+	BaseConstructL(CAknAppUi::EAknEnableSkin);
+	
+	// Create a file to write the text to
+	TInt err = CCoeEnv::Static()->FsSession().MkDirAll(KFileName);
+	if ((KErrNone != err) && (KErrAlreadyExists != err))
+		{
+		Exit();
+		}
+
+	RFile file;
+	err = file.Replace(CCoeEnv::Static()->FsSession(), KFileName, EFileWrite);
+	CleanupClosePushL(file);
+	if (KErrNone != err)
+		{
+		CleanupStack::PopAndDestroy(1); // file
+		Exit();
+		}
+
+	RFileWriteStream outputFileStream(file);
+	CleanupClosePushL(outputFileStream);
+	outputFileStream << KText;
+	this->Document();
+	CleanupStack::PopAndDestroy(2); // outputFileStream, file
+
+	TRAP(err, this->iNPRAppEngine = CNPRAppEngine::NewL(*this));
+	if(err != KErrNone)
+		{
+		Exit();
+		}
+	
+	CNPRListBoxView* mainListBoxView = CNPRListBoxView::NewL();
+	AddViewL(mainListBoxView);
+
+	CNPRStoryListBoxView* storyListBoxView = CNPRStoryListBoxView::NewL();
+	AddViewL(storyListBoxView);
+
+	CNPRStationListBoxView* StationListBoxView = CNPRStationListBoxView::NewL();
+	AddViewL(StationListBoxView);
+
+	CNPRSearchStationListBoxView* searchStationListBoxView = CNPRSearchStationListBoxView::NewL();
+	AddViewL(searchStationListBoxView);
+	
+	CBrowserAknView* browserView = CBrowserAknView::NewL(*iNPRAppEngine);
+	AddViewL(browserView);
+
+	ActivateLocalViewL(TUid::Uid(ENPRListBoxViewId));
+	}
+// -----------------------------------------------------------------------------
+// CNPRAppUi::CNPRAppUi()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CNPRAppUi::CNPRAppUi()
+	{
+	// No implementation required
+	}
+
+// -----------------------------------------------------------------------------
+// CNPRAppUi::~CNPRAppUi()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CNPRAppUi::~CNPRAppUi()
+	{
+	delete iNPRAppEngine;
+	}
+
+// -----------------------------------------------------------------------------
+// CNPRAppUi::HandleCommandL()
+// Takes care of command handling.
+// -----------------------------------------------------------------------------
+//
+void CNPRAppUi::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case EEikCmdExit:
+		case EAknSoftkeyExit:
+			{
+			Exit();
+			}
+			break;
+		case EAbout:
+			{
+			CAknMessageQueryDialog* dlg = new (ELeave) CAknMessageQueryDialog();
+			dlg->PrepareLC(R_ABOUT_QUERY_DIALOG);
+			HBufC* title = iEikonEnv->AllocReadResourceLC(R_ABOUT_DIALOG_TITLE);
+			dlg->QueryHeading()->SetTextL(*title);
+			CleanupStack::PopAndDestroy(); //title
+			HBufC* msg = iEikonEnv->AllocReadResourceLC(R_ABOUT_DIALOG_TEXT);
+			dlg->SetMessageTextL(*msg);
+			CleanupStack::PopAndDestroy(); //msg
+			dlg->RunLD();
+			}
+			break;
+		default:
+			Panic(ENPRUi);
+			break;
+		}
+	}
+
+CNPRAppEngine& CNPRAppUi::Engine()
+	{
+	return *iNPRAppEngine;
+	}
+
+// -----------------------------------------------------------------------------
+//  Called by the framework when the application status pane
+//  size is changed.  Passes the new client rectangle to the
+//  AppView
+// -----------------------------------------------------------------------------
+//
+void CNPRAppUi::HandleStatusPaneSizeChange()
+	{
+	//iAppView->SetRect(ClientRect());
+	}
+
+CArrayFix<TCoeHelpContext>* CNPRAppUi::HelpContextL() const
+	{
+#warning "Please see comment about help and UID3..."
+	// Note: Help will not work if the application uid3 is not in the
+	// protected range.  The default uid3 range for projects created
+	// from this template (0xE0000000 - 0xEFFFFFFF) are not in the protected range so that they
+	// can be self signed and installed on the device during testing.
+	// Once you get your official uid3 from Symbian Ltd. and find/replace
+	// all occurrences of uid3 in your project, the context help will
+	// work. Alternatively, a patch now exists for the versions of 
+	// HTML help compiler in SDKs and can be found here along with an FAQ:
+	// http://www3.symbian.com/faq.nsf/AllByDate/E9DF3257FD565A658025733900805EA2?OpenDocument
+	CArrayFixFlat<TCoeHelpContext>* array = new (ELeave) CArrayFixFlat<
+			TCoeHelpContext> (1);
+	CleanupStack::PushL(array);
+	array->AppendL(TCoeHelpContext(KUidNPRApp, KGeneral_Information));
+	CleanupStack::Pop(array);
+	return array;
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRAppView.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,129 @@
+/*
+ ============================================================================
+ Name		: NPRAppView.cpp
+ Author	  : John Kern
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors: John Kern
+ Description : Application view implementation
+ ============================================================================
+ */
+
+// INCLUDE FILES
+#include <coemain.h>
+#include "NPRAppView.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CNPRAppView::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CNPRAppView* CNPRAppView::NewL(const TRect& aRect)
+	{
+	CNPRAppView* self = CNPRAppView::NewLC(aRect);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CNPRAppView::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CNPRAppView* CNPRAppView::NewLC(const TRect& aRect)
+	{
+	CNPRAppView* self = new (ELeave) CNPRAppView;
+	CleanupStack::PushL(self);
+	self->ConstructL(aRect);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CNPRAppView::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CNPRAppView::ConstructL(const TRect& aRect)
+	{
+	// Create a window for this application view
+	CreateWindowL();
+
+	// Set the windows size
+	SetRect(aRect);
+
+	// Activate the window, which makes it ready to be drawn
+	ActivateL();
+	}
+
+// -----------------------------------------------------------------------------
+// CNPRAppView::CNPRAppView()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CNPRAppView::CNPRAppView()
+	{
+	// No implementation required
+	}
+
+// -----------------------------------------------------------------------------
+// CNPRAppView::~CNPRAppView()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CNPRAppView::~CNPRAppView()
+	{
+	// No implementation required
+	}
+
+// -----------------------------------------------------------------------------
+// CNPRAppView::Draw()
+// Draws the display.
+// -----------------------------------------------------------------------------
+//
+void CNPRAppView::Draw(const TRect& /*aRect*/) const
+	{
+	// Get the standard graphics context
+	CWindowGc& gc = SystemGc();
+
+	// Gets the control's extent
+	TRect drawRect(Rect());
+
+	// Clears the screen
+	gc.Clear(drawRect);
+
+	}
+
+// -----------------------------------------------------------------------------
+// CNPRAppView::SizeChanged()
+// Called by framework when the view size is changed.
+// -----------------------------------------------------------------------------
+//
+void CNPRAppView::SizeChanged()
+	{
+	DrawNow();
+	}
+
+// -----------------------------------------------------------------------------
+// CNPRAppView::HandlePointerEventL()
+// Called by framework to handle pointer touch events.
+// Note: although this method is compatible with earlier SDKs, 
+// it will not be called in SDKs without Touch support.
+// -----------------------------------------------------------------------------
+//
+void CNPRAppView::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+	{
+
+	// Call base class HandlePointerEventL()
+	CCoeControl::HandlePointerEventL(aPointerEvent);
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRApplication.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,52 @@
+/*
+ ============================================================================
+ Name	: NPRApplication.cpp
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - John Kern
+ 
+ Description : This file contains panic codes.
+ ============================================================================
+ */
+
+
+// INCLUDE FILES
+#include "NPR.hrh"
+#include "NPRDocument.h"
+#include "NPRApplication.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CNPRApplication::CreateDocumentL()
+// Creates CApaDocument object
+// -----------------------------------------------------------------------------
+//
+CApaDocument* CNPRApplication::CreateDocumentL()
+	{
+	// Create an NPR document, and return a pointer to it
+	return CNPRDocument::NewL(*this);
+	}
+
+// -----------------------------------------------------------------------------
+// CNPRApplication::AppDllUid()
+// Returns application UID
+// -----------------------------------------------------------------------------
+//
+TUid CNPRApplication::AppDllUid() const
+	{
+	// Return the UID for the NPR application
+	return KUidNPRApp;
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRBrowserAknView.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,103 @@
+/*
+ ===============================================================================
+ Name	: NPRBrowserAknView.cpp
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : AknView for containing Nokia browser control to show NPR's Story 
+ ================================================================================
+ */
+
+#include <aknviewappui.h>
+#include <NPR_0xEEB0E481.rsg>
+#include "NPR.hrh"
+#include "NPRBrowserAknView.h"
+#include "NPRBrowserContainer.h"
+#include "NPRAppUi.h"
+
+
+CBrowserAknView* CBrowserAknView::NewL(CNPRAppEngine& aEngine)
+	{
+	CBrowserAknView* p = new (ELeave) CBrowserAknView(aEngine);
+	CleanupStack::PushL(p);
+	p->ConstructL();
+	CleanupStack::Pop(p);
+	return p;
+	}
+
+CBrowserAknView::CBrowserAknView(CNPRAppEngine& aEngine)
+	: iEngine(aEngine)
+	{
+	}
+
+CBrowserAknView::~CBrowserAknView()
+	{
+	delete iContainer;
+	}
+
+
+void CBrowserAknView::ConstructL()
+	{
+	BaseConstructL(R_AKN_BROWSER_VIEW);
+	iContainer = new (ELeave) CBrowserContainer();
+	iContainer->ConstructL(ClientRect());
+	iContainer->SetMopParent( this );
+	}
+
+TUid CBrowserAknView::Id() const
+	{
+	return TUid::Uid(ENPRBrowserViewId);
+	}
+
+void CBrowserAknView::HandleCommandL(TInt aCommand)
+	{
+	switch(aCommand)
+		{
+		case EListen:
+			{
+			iContainer->Listen();
+			break;
+			}
+		case EAknSoftkeyBack:
+			{
+			static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->ActivateLocalViewL(TUid::Uid(ENPRStoryListBoxViewId));
+			break;
+			}
+		default:
+			{
+			iContainer->ProcessCommandL(aCommand);
+			break;
+			}
+		}
+	}
+
+
+void CBrowserAknView::DoActivateL(const TVwsViewId& /*aPrevViewId*/, TUid /*aCustomMessageId*/,	const TDesC8& /*aCustomMessage*/)
+	{
+	AppUi()->AddToStackL(*this, iContainer);
+	iContainer->MakeVisible(ETrue);
+	iContainer->ActivateL();
+	iContainer->ProcessCommandL(ELoadPage);
+	}
+
+void CBrowserAknView::DoDeactivate()
+	{
+	iContainer->MakeVisible(EFalse);
+	AppUi()->RemoveFromViewStack(*this, iContainer);
+	}
+
+void CBrowserAknView::HandleStatusPaneSizeChange()
+	{
+	CAknView::HandleStatusPaneSizeChange();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRBrowserContainer.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,153 @@
+/*
+ ===============================================================================
+ Name	: NPRBrowserConatiner.cpp
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description :  Container for Nokia browser control to show NPR's Story 
+ ================================================================================
+ */
+
+#include <avkon.hrh>
+#include <aknwaitdialog.h>
+#include <BrCtlInterface.h>
+#include <aknmessagequerydialog.h>
+
+#include "NPRBrowserContainer.h"
+#include "npr.hrh"
+#include "NPRAppUi.h"
+#include "NPRAppEngine.h"
+
+
+_LIT(KStoryHtmlFile, "file:///c:\\data\\npr\\story.html");
+
+void CBrowserContainer::ConstructL(const TRect& aRect)
+    {
+    CreateWindowL();
+    SetRect(aRect);
+   
+    iCommandBase = TBrCtlDefs::ECommandIdBase;
+    iBrowserCaps = TBrCtlDefs::ECapabilityDisplayScrollBar | TBrCtlDefs::ECapabilityLoadHttpFw |
+						TBrCtlDefs::ECapabilityGraphicalHistory | TBrCtlDefs::ECapabilityGraphicalPage;
+    
+    iBrowser = CreateBrowserControlL(this, Rect(), iBrowserCaps, iCommandBase, NULL, NULL, NULL, NULL, NULL);
+
+    TRAP_IGNORE(iBrowser->SetBrowserSettingL(TBrCtlDefs::ESettingsAutoLoadImages,1));
+    iBrowser->AddLoadEventObserverL(this);
+    iBrowser->ActivateL();
+    }
+
+CBrowserContainer::~CBrowserContainer()
+    {
+    if (iBrowser)
+    	iBrowser->RemoveLoadEventObserver(this);
+    delete iBrowser;
+    }
+
+void CBrowserContainer::SizeChanged()
+    {
+    if(iBrowser)
+        {
+        iBrowser->SetRect(Rect());
+        }
+    }
+
+TInt CBrowserContainer::CountComponentControls() const
+    {
+    if(iBrowser)
+        return 1;
+    return 0;
+    }
+
+CCoeControl* CBrowserContainer::ComponentControl(TInt aIndex) const
+    {
+    switch(aIndex)
+        {
+        case 0:
+            return iBrowser; // Could be NULL
+        default:
+            return NULL;
+        }
+    }
+
+void CBrowserContainer::Draw(const TRect& /*aRect*/) const
+    {
+	CWindowGc& gc=SystemGc(); // graphics context we draw to
+	gc.Clear();
+    }
+
+void CBrowserContainer::HandleControlEventL(CCoeControl* /*aControl*/, TCoeEvent /*aEventType*/)
+    {
+    }
+
+TKeyResponse CBrowserContainer::HandleKeyEventL(const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/)
+    {
+    return EKeyWasNotConsumed;
+    }
+
+
+void CBrowserContainer::HandleResourceChange(TInt aType)
+	{
+	CCoeControl::HandleResourceChange(aType);
+	SetRect(CEikonEnv::Static()->EikAppUi()->ClientRect());
+   } 
+
+void CBrowserContainer::ProcessCommandL(TInt aCommandId)
+    {
+    switch(aCommandId)
+        {
+        case ELoadPage:
+        	if (iBrowser!=NULL)
+        		iBrowser->LoadUrlL(KStoryHtmlFile());  
+            break;
+        default:
+            if (aCommandId >= iCommandBase && aCommandId < iCommandBase + TBrCtlDefs::ECommandIdWMLBase && iBrowser)
+                {
+                iBrowser->HandleCommandL(aCommandId);
+                }
+
+            if (aCommandId >= iCommandBase + TBrCtlDefs::ECommandIdWMLBase && aCommandId < iCommandBase + TBrCtlDefs::ECommandIdRange && iBrowser)
+                {
+                iBrowser->HandleCommandL(aCommandId);
+                }              
+            break;      
+        }
+    }
+
+TKeyResponse CBrowserContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+    {
+    if(iBrowser)
+        {
+        return iBrowser->OfferKeyEventL(aKeyEvent, aType);
+        }
+    return EKeyWasConsumed;
+    }
+
+void CBrowserContainer::DynInitMenuPaneL(TInt /*aResourceId*/, CEikMenuPane* /*aMenuPane*/)
+    {
+    }
+
+void CBrowserContainer::HandleBrowserLoadEventL(TBrCtlDefs::TBrCtlLoadEvent aLoadEvent, TUint /*aSize*/, TUint16 /*aTransactionId*/)
+	{	
+	if(aLoadEvent == TBrCtlDefs::EEventLoadFinished)
+		{
+		iBrowser->DrawNow();
+		}
+	}
+
+
+void CBrowserContainer::Listen()
+	{
+	static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->Engine().SendNPRCommandL(EPlayNewsStream, KNullDesC());
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRDocument.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,97 @@
+/*
+ ============================================================================
+ Name	: NPRDocument.cpp
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : Declares document class for application.
+ ============================================================================
+ */
+
+// INCLUDE FILES
+#include "NPRAppUi.h"
+#include "NPRDocument.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CNPRDocument::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CNPRDocument* CNPRDocument::NewL(CEikApplication& aApp)
+	{
+	CNPRDocument* self = NewLC(aApp);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CNPRDocument::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CNPRDocument* CNPRDocument::NewLC(CEikApplication& aApp)
+	{
+	CNPRDocument* self = new (ELeave) CNPRDocument(aApp);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CNPRDocument::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CNPRDocument::ConstructL()
+	{
+	// No implementation required
+	}
+
+// -----------------------------------------------------------------------------
+// CNPRDocument::CNPRDocument()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CNPRDocument::CNPRDocument(CEikApplication& aApp) :
+	CAknDocument(aApp)
+	{
+	// No implementation required
+	}
+
+// ---------------------------------------------------------------------------
+// CNPRDocument::~CNPRDocument()
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CNPRDocument::~CNPRDocument()
+	{
+	// No implementation required
+	}
+
+// ---------------------------------------------------------------------------
+// CNPRDocument::CreateAppUiL()
+// Constructs CreateAppUi.
+// ---------------------------------------------------------------------------
+//
+CEikAppUi* CNPRDocument::CreateAppUiL()
+	{
+	// Create the application user interface, and return a pointer to it;
+	// the framework takes ownership of this object
+	return new (ELeave) CNPRAppUi;
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRHtmlCreator.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,106 @@
+/*
+ ============================================================================
+ Name	: NPRHtmlCreator.cpp
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : HTML composer
+ ============================================================================
+ */
+
+#include "NPRHtmlCreator.h"
+#include "NPRStory.h"
+
+//Constants
+_LIT(KPath, "c:\\data\\npr\\story.html");
+_LIT8(KHtml, "<html><body><h2>%S</h2><img vspace=\"2\" hspace=\"10\" src=\"file:///c:/data/npr/pic%d.jpg\" width=\"125\" height=\"125\" align=\"left\"/>%S</body></html>");
+
+TInt CNPRHtmlCreator::iCurrentImage=6;
+
+CNPRHtmlCreator* CNPRHtmlCreator::NewLC()
+	{
+	CNPRHtmlCreator* self = new (ELeave) CNPRHtmlCreator();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CNPRHtmlCreator* CNPRHtmlCreator::NewL()
+	{
+	CNPRHtmlCreator* self = CNPRHtmlCreator::NewLC();
+	CleanupStack::Pop(); // self;
+	return self;
+	}
+
+CNPRHtmlCreator::~CNPRHtmlCreator()
+	{
+	iFs.Close();
+	}
+
+
+void CNPRHtmlCreator::ConstructL()
+	{
+	User::LeaveIfError(iFs.Connect());
+	}
+
+void CNPRHtmlCreator::CreateHtmlFileL(CNPRStory* aStory)
+	{
+	TInt err = iFs.MkDirAll(KPath);
+	if ((KErrNone != err) && (KErrAlreadyExists != err))
+		{
+		User::Leave(err);
+		}
+	
+	//Open the file, replacing if necessary
+	RFile file;
+	User::LeaveIfError(file.Replace(iFs,KPath,EFileWrite));
+	CleanupClosePushL(file);
+	
+	HBufC8* title=HBufC8::NewLC(aStory->Title().Length());
+	title->Des().Copy(aStory->Title());
+	
+	TInt textLength=aStory->Text().Length();
+	HBufC8* text;
+	if (textLength!=0)
+		{
+		text=HBufC8::NewLC(textLength);
+		text->Des().Copy(aStory->Text());
+		}
+	else
+		{
+		//There was no story, so just display the teaser
+		textLength=aStory->Teaser().Length();
+		text=HBufC8::NewLC(textLength);
+		text->Des().Copy(aStory->Teaser());
+		}
+	
+	HBufC8 *buf = HBufC8::NewLC(KHtml().Length()
+			+ title->Length() 
+			+ textLength +1
+			);
+	
+	--iCurrentImage;
+	if (iCurrentImage<=0)
+		{
+		iCurrentImage=6;
+		}
+	
+	TPtr8 ptr = buf->Des();
+	ptr.Format(KHtml,title, iCurrentImage,text);
+
+	//Write into the file
+	User::LeaveIfError(file.Write(ptr));
+	CleanupStack::PopAndDestroy(3); //buf,teaser,title
+	CleanupStack::PopAndDestroy(&file);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRListBox.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,485 @@
+/*
+ ===============================================================================================
+ Name	: NPRListBox.cpp
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : Container for Series60 single large style list box to show the NPR's main options
+ ===============================================================================================
+ */
+
+#include <barsread.h>
+#include <stringloader.h>
+#include <aknlists.h>
+#include <eikenv.h>
+#include <akniconarray.h>
+#include <eikclbd.h>
+#include <aknviewappui.h>
+#include <eikappui.h>
+#include <NPR_0xEEB0E481.rsg>
+
+#include "NPRListBox.h"
+#include "NPRListBoxView.h"
+#include "NPR.hrh"
+#include "NPRAppUi.h"
+#include "NPRAppEngine.h"
+
+_LIT(KNPR_0xEEB0E481File, "\\resource\\apps\\NPR_0xEEB0E481.mif");
+_LIT ( KStringHeader, "%d\t%S" );
+
+/**
+ * First phase of Symbian two-phase construction. Should not 
+ * contain any code that could leave.
+ */
+CNPRListBox::CNPRListBox()
+	{
+	iListBox = NULL;
+	}
+
+/** 
+ * Destroy child controls.
+ */
+CNPRListBox::~CNPRListBox()
+	{
+	delete iListBox;
+	iListBox = NULL;
+	}
+				
+/**
+ * Construct the control (first phase).
+ *  Creates an instance and initializes it.
+ *  Instance is not left on cleanup stack.
+ * @param aRect bounding rectangle
+ * @param aParent owning parent, or NULL
+ * @param aCommandObserver command observer
+ * @return initialized instance of CNPRListBox
+ */
+CNPRListBox* CNPRListBox::NewL(const TRect& aRect,  const CCoeControl* aParent, MEikCommandObserver* aCommandObserver )
+	{
+	CNPRListBox* self = CNPRListBox::NewLC(aRect, aParent, aCommandObserver);
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+/**
+ * Construct the control (first phase).
+ *  Creates an instance and initializes it.
+ *  Instance is left on cleanup stack.
+ * @param aRect The rectangle for this window
+ * @param aParent owning parent, or NULL
+ * @param aCommandObserver command observer
+ * @return new instance of CNPRListBox
+ */
+CNPRListBox* CNPRListBox::NewLC(const TRect& aRect, const CCoeControl* aParent, MEikCommandObserver* aCommandObserver)
+	{
+	CNPRListBox* self = new (ELeave) CNPRListBox();
+	CleanupStack::PushL(self);
+	self->ConstructL(aRect, aParent, aCommandObserver);
+	return self;
+	}
+			
+/**
+ * Construct the control (second phase).
+ *  Creates a window to contain the controls and activates it.
+ * @param aRect bounding rectangle
+ * @param aCommandObserver command observer
+ * @param aParent owning parent, or NULL
+ */ 
+void CNPRListBox::ConstructL(const TRect& aRect, const CCoeControl* aParent, MEikCommandObserver* aCommandObserver)
+	{
+	if ( aParent == NULL )
+	    {
+		CreateWindowL();
+	    }
+	else
+	    {
+	    SetContainerWindowL( *aParent );
+	    }
+	iFocusControl = NULL;
+	iCommandObserver = aCommandObserver;
+	InitializeControlsL();
+	SetRect( aRect );
+	ActivateL();
+	}
+			
+/**
+* Return the number of controls in the container (override)
+* @return count
+*/
+TInt CNPRListBox::CountComponentControls() const
+	{
+	return ( int ) ELastControl;
+	}
+				
+/**
+* Get the control with the given index (override)
+* @param aIndex Control index [0...n) (limited by #CountComponentControls)
+* @return Pointer to control
+*/
+CCoeControl* CNPRListBox::ComponentControl( TInt aIndex ) const
+	{
+	switch ( aIndex )
+		{
+	case EListBox:
+		return iListBox;
+		}
+	return NULL;
+	}
+				
+/**
+ *	Handle resizing of the container. This implementation will lay out
+ *  full-sized controls like list boxes for any screen size, and will layout
+ *  labels, editors, etc. to the size they were given in the UI designer.
+ *  This code will need to be modified to adjust arbitrary controls to
+ *  any screen size.
+ */				
+void CNPRListBox::SizeChanged()
+	{
+	CCoeControl::SizeChanged();
+	LayoutControls();
+	}
+				
+/**
+ * Layout components as specified in the UI Designer
+ */
+void CNPRListBox::LayoutControls()
+	{
+	iListBox->SetExtent( TPoint( 0, 0 ), iListBox->MinimumSize() );
+	}
+
+/**
+ *	Handle key events.
+ */				
+TKeyResponse CNPRListBox::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
+	{
+	if ( aKeyEvent.iCode == EKeyLeftArrow 
+		|| aKeyEvent.iCode == EKeyRightArrow )
+		{
+		return EKeyWasNotConsumed;
+		}
+
+	if ( aKeyEvent.iCode == EKeyDevice3)
+		{
+		TInt index = CurrentItemIndex();
+		switch(index)
+			{
+			case ENews:
+				{
+				SendNewsQueryL();
+				break;
+				}
+			case EStations:
+				{
+				static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->ActivateLocalViewL(TUid::Uid(ENPRSearchStationListBoxViewId));
+				break;
+				}
+			case EPrograms:
+			case EPlaylist:
+			case ESettings:
+				break;
+			default:
+				break;
+			}
+		}
+	
+	if ( iFocusControl != NULL
+		&& iFocusControl->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
+		{
+		return EKeyWasConsumed;
+		}
+	return CCoeControl::OfferKeyEventL( aKeyEvent, aType );
+	}
+
+/**
+ *	Initialize each control upon creation.
+ */				
+void CNPRListBox::InitializeControlsL()
+	{
+	iListBox = new ( ELeave ) CAknSingleLargeStyleListBox;
+	iListBox->SetContainerWindowL( *this );
+	TResourceReader reader;
+	iEikonEnv->CreateResourceReaderLC( reader, R_NPRLIST_BOX_LIST_BOX );
+	iListBox->ConstructFromResourceL( reader );
+	CleanupStack::PopAndDestroy(); // reader internal state
+	
+	// the listbox owns the items in the list and will free them
+	iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
+	
+	// setup the icon array so graphics-style boxes work
+	SetupListBoxIconsL();
+	
+	// add list items
+	AddListBoxResourceArrayItemL( R_NPRLIST_BOX_LISTBOX_ITEM1,
+			EListBoxNpr_0xeeb0e481Qgn_menu_nprIndex );
+	AddListBoxResourceArrayItemL( R_NPRLIST_BOX_LISTBOX_ITEM2,
+			EListBoxNpr_0xeeb0e481Qgn_menu_nprIndex );
+	AddListBoxResourceArrayItemL( R_NPRLIST_BOX_LISTBOX_ITEM3,
+			EListBoxNpr_0xeeb0e481Qgn_menu_nprIndex );
+	AddListBoxResourceArrayItemL( R_NPRLIST_BOX_LISTBOX_ITEM4,
+			EListBoxNpr_0xeeb0e481Qgn_menu_nprIndex );
+	AddListBoxResourceArrayItemL( R_NPRLIST_BOX_LISTBOX_ITEM5,
+			EListBoxNpr_0xeeb0e481Qgn_menu_nprIndex );
+	
+	iListBox->SetFocus( ETrue );
+	iFocusControl = iListBox;
+	}
+
+/** 
+ * Handle global resource changes, such as scalable UI or skin events (override)
+ */
+void CNPRListBox::HandleResourceChange( TInt aType )
+	{
+	CCoeControl::HandleResourceChange( aType );
+	SetRect( iAvkonViewAppUi->View( TUid::Uid( ENPRListBoxViewId ) )->ClientRect() );
+	}
+				
+/**
+ *	Draw container contents.
+ */				
+void CNPRListBox::Draw(const TRect& aRect) const
+	{
+	CWindowGc& gc = SystemGc();
+	gc.Clear( aRect );
+	}
+				
+/**
+ *	Add a list box item to a list.
+ */
+void CNPRListBox::AddListBoxItemL( 
+		CEikTextListBox* aListBox,
+		const TDesC& aString )
+	{
+	CTextListBoxModel* model = aListBox->Model();
+	CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
+	itemArray->AppendL( aString );
+	aListBox->HandleItemAdditionL();
+	}
+
+/**
+ * Get the array of selected item indices, with respect to the list model.
+ * The array is sorted in ascending order.
+ * The array should be destroyed with two calls to CleanupStack::PopAndDestroy(),
+ * the first with no argument (referring to the internal resource) and the
+ * second with the array pointer.
+ * @return newly allocated array, which is left on the cleanup stack;
+ *	or NULL for empty list. 
+ */
+RArray< TInt >* CNPRListBox::GetSelectedListBoxItemsLC( CEikTextListBox* aListBox )
+	{
+	CAknFilteredTextListBoxModel* model = 
+		static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
+	if ( model->NumberOfItems() == 0 )
+		return NULL;
+		
+	// get currently selected indices
+	const CListBoxView::CSelectionIndexArray* selectionIndexes =
+		aListBox->SelectionIndexes();
+	TInt selectedIndexesCount = selectionIndexes->Count();
+	if ( selectedIndexesCount == 0 )
+		return NULL;
+		
+	// copy the indices and sort numerically
+	RArray<TInt>* orderedSelectedIndices = 
+		new (ELeave) RArray< TInt >( selectedIndexesCount );
+	
+	// push the allocated array
+	CleanupStack::PushL( orderedSelectedIndices );
+	
+	// dispose the array resource
+	CleanupClosePushL( *orderedSelectedIndices );
+	
+	// see if the search field is enabled
+	CAknListBoxFilterItems* filter = model->Filter();
+	if ( filter != NULL )
+		{
+		// when filtering enabled, translate indices back to underlying model
+		for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
+			{
+			TInt filteredItem = ( *selectionIndexes ) [ idx ];
+			TInt actualItem = filter->FilteredItemIndex ( filteredItem );
+			orderedSelectedIndices->InsertInOrder( actualItem );
+			}
+		}
+	else
+		{
+		// the selection indices refer directly to the model
+		for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
+			orderedSelectedIndices->InsertInOrder( ( *selectionIndexes ) [ idx ] );
+		}	
+		
+	return orderedSelectedIndices;
+	}
+
+/**
+ * Delete the selected item or items from the list box.
+ */
+void CNPRListBox::DeleteSelectedListBoxItemsL( CEikTextListBox* aListBox )
+	{
+	CAknFilteredTextListBoxModel* model = 
+		static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
+	if ( model->NumberOfItems() == 0 )
+		return;
+	
+	RArray< TInt >* orderedSelectedIndices = GetSelectedListBoxItemsLC( aListBox );		
+	if ( !orderedSelectedIndices )
+		return;
+		
+	// Delete selected items from bottom up so indices don't change on us
+	CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
+	TInt currentItem = 0;
+	
+	for ( TInt idx = orderedSelectedIndices->Count(); idx-- > 0; ) 
+		{
+		currentItem = ( *orderedSelectedIndices )[ idx ];
+		itemArray->Delete ( currentItem );
+		}
+	
+	// dispose the array resources
+	CleanupStack::PopAndDestroy();
+	
+	// dispose the array pointer
+	CleanupStack::PopAndDestroy( orderedSelectedIndices );
+	
+	// refresh listbox's cursor now that items are deleted
+	AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(
+		aListBox, currentItem, ETrue );
+	}
+
+/**
+ *	Get the listbox.
+ */
+CAknSingleLargeStyleListBox* CNPRListBox::ListBox()
+	{
+	return iListBox;
+	}
+
+/**
+ *	Create a list box item with the given column values.
+ */
+void CNPRListBox::CreateListBoxItemL( TDes& aBuffer, 
+		TInt aIconIndex,
+		const TDesC& aMainText )
+	{
+	aBuffer.Format( KStringHeader(), aIconIndex, &aMainText );
+	} 
+
+/**
+ *	Add an item to the list by reading the text items from the array resource
+ *	and setting a single image property (if available) from an index
+ *	in the list box's icon array.
+ *	@param aResourceId id of an ARRAY resource containing the textual
+ *	items in the columns
+ *	@param aIconIndex the index in the icon array, or -1
+ */
+void CNPRListBox::AddListBoxResourceArrayItemL( TInt aResourceId, TInt aIconIndex )
+	{
+	CDesCArray* array = iCoeEnv->ReadDesCArrayResourceL( aResourceId );
+	CleanupStack::PushL( array );
+	// This is intended to be large enough, but if you get 
+	// a USER 11 panic, consider reducing string sizes.
+	TBuf<512> listString; 
+	CreateListBoxItemL( listString, aIconIndex, ( *array ) [ 0 ] );
+	AddListBoxItemL( iListBox, listString );
+	CleanupStack::PopAndDestroy( array );
+	} 
+				
+/**
+ *	Set up the list's icon array.
+ */
+void CNPRListBox::SetupListBoxIconsL()
+	{
+	/*
+	CArrayPtr< CGulIcon >* icons = NULL;		
+	icons = new (ELeave) CAknIconArray( 1 );
+	CleanupStack::PushL( icons );
+	CGulIcon* icon;
+	// for EListBoxNpr_0xeeb0e481Qgn_menu_nprIndex
+	icon = LoadAndScaleIconL(
+			KNPR_0xEEB0E481File, EMbmNpr_0xeeb0e481Qgn_menu_npr, -1,
+			NULL, EAspectRatioPreserved );
+	CleanupStack::PushL( icon );
+	icons->AppendL( icon );
+	CleanupStack::Pop( icon );
+	CleanupStack::Pop( icons );
+	
+	if ( icons != NULL )
+		{
+		iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
+		}
+	*/
+	}
+
+/** 
+ *	Handle commands relating to markable lists.
+ */
+TBool CNPRListBox::HandleMarkableListCommandL(TInt /*aCommand*/)
+	{
+	return EFalse;
+	}
+
+/**
+ *	This routine loads and scales a bitmap or icon.
+ *
+ *	@param aFileName the MBM or MIF filename
+ *	@param aBitmapId the bitmap id
+ *	@param aMaskId the mask id or -1 for none
+ *	@param aSize the TSize for the icon, or NULL to use real size
+ *	@param aScaleMode one of the EAspectRatio* enums when scaling
+ *
+ */
+CGulIcon* CNPRListBox::LoadAndScaleIconL( 
+		const TDesC& aFileName,
+		TInt aBitmapId, 
+		TInt aMaskId, 
+		TSize* aSize, 
+		TScaleMode aScaleMode )
+	{
+	CFbsBitmap* bitmap;
+	CFbsBitmap* mask;
+	AknIconUtils::CreateIconL( bitmap, mask, aFileName, aBitmapId, aMaskId );
+	
+	TSize size;
+	if ( aSize == NULL )
+		{
+		// Use size from the image header.  In case of SVG,
+		// we preserve the image data for a while longer, since ordinarily
+		// it is disposed at the first GetContentDimensions() or SetSize() call.
+		AknIconUtils::PreserveIconData( bitmap );
+		AknIconUtils::GetContentDimensions( bitmap, size );
+		}
+	else
+		{
+		size = *aSize;
+		}
+	
+	AknIconUtils::SetSize( bitmap, size, aScaleMode );
+	AknIconUtils::SetSize( mask, size, aScaleMode );
+	
+	if ( aSize == NULL )
+		{
+		AknIconUtils::DestroyIconData( bitmap );
+		}
+	
+	return CGulIcon::NewL( bitmap, mask );
+	}
+
+TInt CNPRListBox::CurrentItemIndex()
+	{
+	return iListBox->CurrentItemIndex();
+	}
+
+void CNPRListBox::SendNewsQueryL()
+	{
+	static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->Engine().SendNPRCommandL(ENewsCmd, KNullDesC());
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRListBoxView.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,236 @@
+/*
+ ============================================================================
+ Name	: NPRListBoxView.cpp
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : AknView to wrap the Series60 container to show the NPR's main options
+ ============================================================================
+ */
+
+#include <barsread.h>
+#include <akncontext.h>
+#include <akntitle.h>
+#include <NPR_0xEEB0E481.rsg>
+
+#include "NPR.hrh"
+#include "NPRListBoxView.h"
+#include "NPRListBox.h"
+#include "NPRAppUi.h"
+#include "NPRAppEngine.h"
+
+
+/**
+ * Symbian two-phase constructor.
+ * This creates an instance then calls the second-phase constructor
+ * without leaving the instance on the cleanup stack.
+ * @return new instance of CNPRListBoxView
+ */
+CNPRListBoxView* CNPRListBoxView::NewL()
+	{
+	CNPRListBoxView* self = CNPRListBoxView::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+/**
+ * Symbian two-phase constructor.
+ * This creates an instance, pushes it on the cleanup stack,
+ * then calls the second-phase constructor.
+ * @return new instance of CNPRListBoxView
+ */
+CNPRListBoxView* CNPRListBoxView::NewLC()
+	{
+	CNPRListBoxView* self = new ( ELeave ) CNPRListBoxView();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	return self;
+	}
+
+/**
+ * First phase of Symbian two-phase construction. Should not contain any
+ * code that could leave.
+ */
+CNPRListBoxView::CNPRListBoxView()
+	:iNPRListBox(NULL)
+	{
+	}
+
+/** 
+ * The view's destructor removes the container from the control
+ * stack and destroys it.
+ */
+CNPRListBoxView::~CNPRListBoxView()
+	{
+	delete iNPRListBox;
+	iNPRListBox = NULL;
+	}
+
+
+/**
+ * Second-phase constructor for view.  
+ * Initialize contents from resource.
+ */ 
+void CNPRListBoxView::ConstructL()
+	{
+	BaseConstructL( R_NPRLIST_BOX_NPRLIST_BOX_VIEW );
+	}
+
+/**
+ * @return The UID for this view
+ */
+TUid CNPRListBoxView::Id() const
+	{
+	return TUid::Uid( ENPRListBoxViewId );
+	}
+
+/**
+ * Handle a command for this view (override)
+ * @param aCommand command id to be handled
+ */
+void CNPRListBoxView::HandleCommandL(TInt aCommand)
+	{
+	TBool commandHandled = EFalse;
+	switch(aCommand)
+		{	// code to dispatch to the AknView's menu and CBA commands is generated here
+		case ESelect:
+			{
+			commandHandled = ETrue;
+			TInt index = iNPRListBox->CurrentItemIndex();
+			switch(index)
+				{
+				case ENews:
+					{
+					iNPRListBox->SendNewsQueryL();
+					break;
+					}
+				case EStations:
+					{
+					static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->ActivateLocalViewL(TUid::Uid(ENPRSearchStationListBoxViewId));
+					break;
+					}
+				case EPrograms:
+					break;
+				default:
+					break;
+				}
+			break;
+			}
+		default:
+			break;
+		}
+	
+		
+	if (!commandHandled) 
+		{
+		if ( aCommand == EAknSoftkeyExit )
+			{
+			AppUi()->HandleCommandL( EEikCmdExit );
+			}
+		}
+	}
+
+/**
+ *	Handles user actions during activation of the view, 
+ *	such as initializing the content.
+ */
+void CNPRListBoxView::DoActivateL( 
+		const TVwsViewId& /*aPrevViewId*/,
+		TUid /*aCustomMessageId*/,
+		const TDesC8& /*aCustomMessage*/ )
+	{
+	SetupStatusPaneL();
+					
+	if ( iNPRListBox == NULL )
+		{
+		iNPRListBox = CreateContainerL();
+		iNPRListBox->SetMopParent( this );
+		AppUi()->AddToStackL( *this, iNPRListBox );
+		}
+	}
+
+/**
+ */
+void CNPRListBoxView::DoDeactivate()
+	{
+	CleanupStatusPane();
+	
+	if ( iNPRListBox != NULL )
+		{
+		AppUi()->RemoveFromViewStack( *this, iNPRListBox );
+		delete iNPRListBox;
+		iNPRListBox = NULL;
+		}
+	}
+
+/** 
+ * Handle status pane size change for this view (override)
+ */
+void CNPRListBoxView::HandleStatusPaneSizeChange()
+	{
+	CAknView::HandleStatusPaneSizeChange();
+	
+	// this may fail, but we're not able to propagate exceptions here
+	TVwsViewId view;
+	AppUi()->GetActiveViewId( view );
+	if ( view.iViewUid == Id() )
+		{
+		TInt result;
+		TRAP( result, SetupStatusPaneL() );
+		}
+	}
+
+void CNPRListBoxView::SetupStatusPaneL()
+	{
+	// reset the context pane
+	TUid contextPaneUid = TUid::Uid( EEikStatusPaneUidContext );
+	CEikStatusPaneBase::TPaneCapabilities subPaneContext = 
+		StatusPane()->PaneCapabilities( contextPaneUid );
+	if ( subPaneContext.IsPresent() && subPaneContext.IsAppOwned() )
+		{
+		CAknContextPane* context = static_cast< CAknContextPane* > ( 
+			StatusPane()->ControlL( contextPaneUid ) );
+		context->SetPictureToDefaultL();
+		}
+	
+	// setup the title pane
+	TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
+	CEikStatusPaneBase::TPaneCapabilities subPaneTitle = 
+		StatusPane()->PaneCapabilities( titlePaneUid );
+	if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() )
+		{
+		CAknTitlePane* title = static_cast< CAknTitlePane* >( 
+			StatusPane()->ControlL( titlePaneUid ) );
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_NPRLIST_BOX_TITLE_RESOURCE );
+		title->SetFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}				
+	}
+
+void CNPRListBoxView::CleanupStatusPane()
+	{
+	}
+
+
+/**
+ *	Creates the top-level container for the view.  You may modify this method's
+ *	contents and the CNPRListBox::NewL() signature as needed to initialize the
+ *	container, but the signature for this method is fixed.
+ *	@return new initialized instance of CNPRListBox
+ */
+CNPRListBox* CNPRListBoxView::CreateContainerL()
+	{
+	return CNPRListBox::NewL( ClientRect(), NULL, this );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRSearchStationListBox.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,458 @@
+/*
+ ===================================================================================================
+ Name	: NPRSearchStationListBox.cpp
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : Container for Series60 single style list box to show the NPR's station search options
+ ===================================================================================================
+ */
+
+#include <barsread.h>
+#include <aknlists.h>
+#include <eikclbd.h>
+#include <aknviewappui.h>
+#include <AknQueryDialog.h>
+#include <NPR_0xEEB0E481.rsg>
+
+#include "NPRSearchStationListBox.h"
+#include "NPRSearchStationListBoxView.h"
+#include "NPR.hrh"
+#include "NPRAppUi.h"
+#include "NPRAppEngine.h"
+
+TInt ShowQueryDialogL(const TDesC& aTitle, TDes& aBuffer)
+	{
+	CAknTextQueryDialog* Dialog = CAknTextQueryDialog::NewL(aBuffer,CAknQueryDialog::ENoTone);
+	Dialog->PrepareLC(R_ASK_NAME_DIALOG);
+	Dialog->SetPromptL(aTitle);
+	return Dialog->RunLD();
+	}
+
+/**
+ * First phase of Symbian two-phase construction. Should not 
+ * contain any code that could leave.
+ */
+CNPRSearchStationListBox::CNPRSearchStationListBox()
+	{
+	iListBox = NULL;
+	}
+
+/** 
+ * Destroy child controls.
+ */
+CNPRSearchStationListBox::~CNPRSearchStationListBox()
+	{
+	delete iListBox;
+	iListBox = NULL;
+	}
+				
+/**
+ * Construct the control (first phase).
+ *  Creates an instance and initializes it.
+ *  Instance is not left on cleanup stack.
+ * @param aRect bounding rectangle
+ * @param aParent owning parent, or NULL
+ * @param aCommandObserver command observer
+ * @return initialized instance of CNPRSearchStationListBox
+ */
+CNPRSearchStationListBox* CNPRSearchStationListBox::NewL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	CNPRSearchStationListBox* self = CNPRSearchStationListBox::NewLC( 
+			aRect, 
+			aParent, 
+			aCommandObserver );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+/**
+ * Construct the control (first phase).
+ *  Creates an instance and initializes it.
+ *  Instance is left on cleanup stack.
+ * @param aRect The rectangle for this window
+ * @param aParent owning parent, or NULL
+ * @param aCommandObserver command observer
+ * @return new instance of CNPRSearchStationListBox
+ */
+CNPRSearchStationListBox* CNPRSearchStationListBox::NewLC( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	CNPRSearchStationListBox* self = new ( ELeave ) CNPRSearchStationListBox();
+	CleanupStack::PushL( self );
+	self->ConstructL( aRect, aParent, aCommandObserver );
+	return self;
+	}
+			
+/**
+ * Construct the control (second phase).
+ *  Creates a window to contain the controls and activates it.
+ * @param aRect bounding rectangle
+ * @param aCommandObserver command observer
+ * @param aParent owning parent, or NULL
+ */ 
+void CNPRSearchStationListBox::ConstructL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	if ( aParent == NULL )
+	    {
+		CreateWindowL();
+	    }
+	else
+	    {
+	    SetContainerWindowL( *aParent );
+	    }
+	iFocusControl = NULL;
+	iCommandObserver = aCommandObserver;
+	InitializeControlsL();
+	SetRect( aRect );
+	ActivateL();
+	}
+			
+/**
+* Return the number of controls in the container (override)
+* @return count
+*/
+TInt CNPRSearchStationListBox::CountComponentControls() const
+	{
+	return ( int ) ELastControl;
+	}
+				
+/**
+* Get the control with the given index (override)
+* @param aIndex Control index [0...n) (limited by #CountComponentControls)
+* @return Pointer to control
+*/
+CCoeControl* CNPRSearchStationListBox::ComponentControl( TInt aIndex ) const
+	{
+	switch ( aIndex )
+		{
+	case EListBox:
+		return iListBox;
+		}
+	return NULL;
+	}
+				
+/**
+ *	Handle resizing of the container. This implementation will lay out
+ *  full-sized controls like list boxes for any screen size, and will layout
+ *  labels, editors, etc. to the size they were given in the UI designer.
+ *  This code will need to be modified to adjust arbitrary controls to
+ *  any screen size.
+ */				
+void CNPRSearchStationListBox::SizeChanged()
+	{
+	CCoeControl::SizeChanged();
+	LayoutControls();
+	}
+				
+/**
+ * Layout components as specified in the UI Designer
+ */
+void CNPRSearchStationListBox::LayoutControls()
+	{
+	iListBox->SetExtent( TPoint( 0, 0 ), iListBox->MinimumSize() );
+	}
+
+void CNPRSearchStationListBox::SendStationQueryL()
+	{
+	TInt index = CurrentItemIndex();
+	switch(index)
+		{
+		case EZipCode:
+			{
+			TBuf<16> zipCode;
+			ShowQueryDialogL(_L("ZIP Code"),zipCode);
+			if(zipCode.Length() != 0)
+				{				
+				TBuf<32> zipCodeFormat;
+				zipCodeFormat.Format(KNPRZipQuery,&zipCode);
+				static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->Engine().SendNPRCommandL(EStationsCmd, zipCodeFormat);
+				}
+			break;
+			}
+		case ECurrentLocation:
+			{
+			TBuf<32> zipCodeFormat;
+			zipCodeFormat.Format(KNPRZipQuery,&KNPRCurrentLocationZip());
+			static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->Engine().SendNPRCommandL(EStationsCmd, zipCodeFormat);
+			break;
+			}
+		case ECityName:
+			{
+			break;
+			}
+		case EShowAll:
+			{
+			break;
+			}
+		default:
+			break;
+		}
+	}
+
+/**
+ *	Handle key events.
+ */				
+TKeyResponse CNPRSearchStationListBox::OfferKeyEventL( 
+		const TKeyEvent& aKeyEvent, 
+		TEventCode aType )
+	{
+	if ( aKeyEvent.iCode == EKeyLeftArrow 
+		|| aKeyEvent.iCode == EKeyRightArrow )
+		{
+		// Listbox takes all events even if it doesn't use them
+		return EKeyWasNotConsumed;
+		}
+
+	if ( aKeyEvent.iCode == EKeyDevice3)
+		{
+		SendStationQueryL();
+		}
+	
+	if ( iFocusControl != NULL
+		&& iFocusControl->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
+		{
+		return EKeyWasConsumed;
+		}
+	return CCoeControl::OfferKeyEventL( aKeyEvent, aType );
+	}
+				
+/**
+ *	Initialize each control upon creation.
+ */				
+void CNPRSearchStationListBox::InitializeControlsL()
+	{
+	iListBox = new ( ELeave ) CAknSingleStyleListBox;
+	iListBox->SetContainerWindowL( *this );
+		{
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_NPRSEARCH_STATION_LIST_BOX_LIST_BOX );
+		iListBox->ConstructFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+	// the listbox owns the items in the list and will free them
+	iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
+	
+	// setup the icon array so graphics-style boxes work
+	SetupListBoxIconsL();
+	
+	
+	// add list items
+	// add list items
+	AddListBoxResourceArrayItemL(R_NPRSEARCH_STATION_LIST_BOX_ITEM1, EListBoxFirstUserImageIndex );
+	AddListBoxResourceArrayItemL(R_NPRSEARCH_STATION_LIST_BOX_ITEM2, EListBoxFirstUserImageIndex );
+	AddListBoxResourceArrayItemL(R_NPRSEARCH_STATION_LIST_BOX_ITEM3, EListBoxFirstUserImageIndex );
+	AddListBoxResourceArrayItemL(R_NPRSEARCH_STATION_LIST_BOX_ITEM4, EListBoxFirstUserImageIndex );
+	
+	
+	iListBox->SetFocus( ETrue );
+	iFocusControl = iListBox;
+	
+	}
+
+/** 
+ * Handle global resource changes, such as scalable UI or skin events (override)
+ */
+void CNPRSearchStationListBox::HandleResourceChange( TInt aType )
+	{
+	CCoeControl::HandleResourceChange( aType );
+	SetRect( iAvkonViewAppUi->View( TUid::Uid( ENPRSearchStationListBoxViewId ) )->ClientRect() );
+	}
+				
+/**
+ *	Draw container contents.
+ */				
+void CNPRSearchStationListBox::Draw( const TRect& aRect ) const
+	{
+	CWindowGc& gc = SystemGc();
+	gc.Clear( aRect );
+	}
+				
+/**
+ *	Add a list box item to a list.
+ */
+void CNPRSearchStationListBox::AddListBoxItemL( 
+		CEikTextListBox* aListBox,
+		const TDesC& aString )
+	{
+	CTextListBoxModel* model = aListBox->Model();
+	CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
+	itemArray->AppendL( aString );
+	aListBox->HandleItemAdditionL();
+	}
+
+/**
+ * Get the array of selected item indices, with respect to the list model.
+ * The array is sorted in ascending order.
+ * The array should be destroyed with two calls to CleanupStack::PopAndDestroy(),
+ * the first with no argument (referring to the internal resource) and the
+ * second with the array pointer.
+ * @return newly allocated array, which is left on the cleanup stack;
+ *	or NULL for empty list. 
+ */
+RArray< TInt >* CNPRSearchStationListBox::GetSelectedListBoxItemsLC( CEikTextListBox* aListBox )
+	{
+	CAknFilteredTextListBoxModel* model = 
+		static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
+	if ( model->NumberOfItems() == 0 )
+		return NULL;
+		
+	// get currently selected indices
+	const CListBoxView::CSelectionIndexArray* selectionIndexes =
+		aListBox->SelectionIndexes();
+	TInt selectedIndexesCount = selectionIndexes->Count();
+	if ( selectedIndexesCount == 0 )
+		return NULL;
+		
+	// copy the indices and sort numerically
+	RArray<TInt>* orderedSelectedIndices = 
+		new (ELeave) RArray< TInt >( selectedIndexesCount );
+	
+	// push the allocated array
+	CleanupStack::PushL( orderedSelectedIndices );
+	
+	// dispose the array resource
+	CleanupClosePushL( *orderedSelectedIndices );
+	
+	// see if the search field is enabled
+	CAknListBoxFilterItems* filter = model->Filter();
+	if ( filter != NULL )
+		{
+		// when filtering enabled, translate indices back to underlying model
+		for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
+			{
+			TInt filteredItem = ( *selectionIndexes ) [ idx ];
+			TInt actualItem = filter->FilteredItemIndex ( filteredItem );
+			orderedSelectedIndices->InsertInOrder( actualItem );
+			}
+		}
+	else
+		{
+		// the selection indices refer directly to the model
+		for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
+			orderedSelectedIndices->InsertInOrder( ( *selectionIndexes ) [ idx ] );
+		}	
+		
+	return orderedSelectedIndices;
+	}
+
+/**
+ * Delete the selected item or items from the list box.
+ */
+void CNPRSearchStationListBox::DeleteSelectedListBoxItemsL( CEikTextListBox* aListBox )
+	{
+	CAknFilteredTextListBoxModel* model = 
+		static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
+	if ( model->NumberOfItems() == 0 )
+		return;
+	
+	RArray< TInt >* orderedSelectedIndices = GetSelectedListBoxItemsLC( aListBox );		
+	if ( !orderedSelectedIndices )
+		return;
+		
+	// Delete selected items from bottom up so indices don't change on us
+	CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
+	TInt currentItem = 0;
+	
+	for ( TInt idx = orderedSelectedIndices->Count(); idx-- > 0; ) 
+		{
+		currentItem = ( *orderedSelectedIndices )[ idx ];
+		itemArray->Delete ( currentItem );
+		}
+	
+	// dispose the array resources
+	CleanupStack::PopAndDestroy();
+	
+	// dispose the array pointer
+	CleanupStack::PopAndDestroy( orderedSelectedIndices );
+	
+	// refresh listbox's cursor now that items are deleted
+	AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(
+		aListBox, currentItem, ETrue );
+	}
+
+/**
+ *	Get the listbox.
+ */
+CAknSingleStyleListBox* CNPRSearchStationListBox::ListBox()
+	{
+	return iListBox;
+	}
+
+/**
+ *	Create a list box item with the given column values.
+ */
+void CNPRSearchStationListBox::CreateListBoxItemL( TDes& aBuffer, 
+		TInt aIconIndex,
+		const TDesC& aMainText )
+	{
+	_LIT ( KStringHeader, "%d\t%S" );
+	
+	aBuffer.Format( KStringHeader(), aIconIndex, &aMainText );
+	} 
+				
+/**
+ *	Add an item to the list by reading the text items from the array resource
+ *	and setting a single image property (if available) from an index
+ *	in the list box's icon array.
+ *	@param aResourceId id of an ARRAY resource containing the textual
+ *	items in the columns
+ *	@param aIconIndex the index in the icon array, or -1
+ */
+void CNPRSearchStationListBox::AddListBoxResourceArrayItemL( TInt aResourceId, TInt aIconIndex )
+	{
+	CDesCArray* array = iCoeEnv->ReadDesCArrayResourceL( aResourceId );
+	CleanupStack::PushL( array );
+	// This is intended to be large enough, but if you get 
+	// a USER 11 panic, consider reducing string sizes.
+	TBuf<512> listString; 
+	CreateListBoxItemL( listString, aIconIndex, ( *array ) [ 0 ] );
+	AddListBoxItemL( iListBox, listString );
+	CleanupStack::PopAndDestroy( array );
+	} 
+				
+/**
+ *	Set up the list's icon array.
+ */
+void CNPRSearchStationListBox::SetupListBoxIconsL()
+	{
+	CArrayPtr< CGulIcon >* icons = NULL;		
+	
+	if ( icons != NULL )
+		{
+		iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
+		}
+	}
+
+/** 
+ *	Handle commands relating to markable lists.
+ */
+TBool CNPRSearchStationListBox::HandleMarkableListCommandL( TInt /*aCommand*/)
+	{
+	TBool result = EFalse;
+	return result;
+	}
+
+TInt CNPRSearchStationListBox::CurrentItemIndex()
+	{
+	return iListBox->CurrentItemIndex();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRSearchStationListBoxView.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,211 @@
+/*
+ ===================================================================================================
+ Name	: NPRSearchStationListBoxView.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : AknView for wrapping the container to show the NPR's station search options
+ ===================================================================================================
+ */
+
+#include <barsread.h>
+#include <aknlists.h>
+#include <akncontext.h>
+#include <akntitle.h>
+#include <NPR_0xEEB0E481.rsg>
+
+#include "NPR.hrh"
+#include "NPRSearchStationListBoxView.h"
+#include "NPRSearchStationListBox.h"
+#include "NPRAppUi.h"
+#include "NPRAppEngine.h"
+
+/**
+ * First phase of Symbian two-phase construction. Should not contain any
+ * code that could leave.
+ */
+CNPRSearchStationListBoxView::CNPRSearchStationListBoxView()
+	{
+	iNPRSearchStationListBox = NULL;
+	}
+
+/** 
+ * The view's destructor removes the container from the control
+ * stack and destroys it.
+ */
+CNPRSearchStationListBoxView::~CNPRSearchStationListBoxView()
+	{
+	delete iNPRSearchStationListBox;
+	iNPRSearchStationListBox = NULL;
+	}
+
+/**
+ * Symbian two-phase constructor.
+ * This creates an instance then calls the second-phase constructor
+ * without leaving the instance on the cleanup stack.
+ * @return new instance of CNPRSearchStationListBoxView
+ */
+CNPRSearchStationListBoxView* CNPRSearchStationListBoxView::NewL()
+	{
+	CNPRSearchStationListBoxView* self = CNPRSearchStationListBoxView::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+/**
+ * Symbian two-phase constructor.
+ * This creates an instance, pushes it on the cleanup stack,
+ * then calls the second-phase constructor.
+ * @return new instance of CNPRSearchStationListBoxView
+ */
+CNPRSearchStationListBoxView* CNPRSearchStationListBoxView::NewLC()
+	{
+	CNPRSearchStationListBoxView* self = new ( ELeave ) CNPRSearchStationListBoxView();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	return self;
+	}
+
+
+/**
+ * Second-phase constructor for view.  
+ * Initialize contents from resource.
+ */ 
+void CNPRSearchStationListBoxView::ConstructL()
+	{
+	BaseConstructL( R_NPRSEARCH_STATION_LIST_BOX_NPRSEARCH_STATION_LIST_BOX_VIEW );
+	}
+
+/**
+ * @return The UID for this view
+ */
+TUid CNPRSearchStationListBoxView::Id() const
+	{
+	return TUid::Uid( ENPRSearchStationListBoxViewId );
+	}
+
+/**
+ * Handle a command for this view (override)
+ * @param aCommand command id to be handled
+ */
+void CNPRSearchStationListBoxView::HandleCommandL( TInt aCommand )
+	{
+	switch(aCommand)
+		{	// code to dispatch to the AknView's menu and CBA commands is generated here
+		case ESelect:
+			{
+			iNPRSearchStationListBox->SendStationQueryL();
+			break;
+			}
+		case EAknSoftkeyBack:
+			{
+			static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->ActivateLocalViewL(TUid::Uid(ENPRListBoxViewId));
+			break;
+			}
+		default:
+			break;
+		}
+	}
+
+/**
+ *	Handles user actions during activation of the view, 
+ *	such as initializing the content.
+ */
+void CNPRSearchStationListBoxView::DoActivateL( 
+		const TVwsViewId& /*aPrevViewId*/,
+		TUid /*aCustomMessageId*/,
+		const TDesC8& /*aCustomMessage*/ )
+	{
+	SetupStatusPaneL();
+	if ( iNPRSearchStationListBox == NULL )
+		{
+		iNPRSearchStationListBox = CreateContainerL();
+		iNPRSearchStationListBox->SetMopParent( this );
+		AppUi()->AddToStackL( *this, iNPRSearchStationListBox );
+		} 
+	}
+
+/**
+ */
+void CNPRSearchStationListBoxView::DoDeactivate()
+	{
+	CleanupStatusPane();
+	
+	if ( iNPRSearchStationListBox != NULL )
+		{
+		AppUi()->RemoveFromViewStack( *this, iNPRSearchStationListBox );
+		delete iNPRSearchStationListBox;
+		iNPRSearchStationListBox = NULL;
+		}
+	}
+
+/** 
+ * Handle status pane size change for this view (override)
+ */
+void CNPRSearchStationListBoxView::HandleStatusPaneSizeChange()
+	{
+	CAknView::HandleStatusPaneSizeChange();
+	
+	// this may fail, but we're not able to propagate exceptions here
+	TVwsViewId view;
+	AppUi()->GetActiveViewId( view );
+	if ( view.iViewUid == Id() )
+		{
+		TInt result;
+		TRAP( result, SetupStatusPaneL() );
+		}
+	}
+
+void CNPRSearchStationListBoxView::SetupStatusPaneL()
+	{
+	// reset the context pane
+	TUid contextPaneUid = TUid::Uid( EEikStatusPaneUidContext );
+	CEikStatusPaneBase::TPaneCapabilities subPaneContext = 
+		StatusPane()->PaneCapabilities( contextPaneUid );
+	if ( subPaneContext.IsPresent() && subPaneContext.IsAppOwned() )
+		{
+		CAknContextPane* context = static_cast< CAknContextPane* > ( 
+			StatusPane()->ControlL( contextPaneUid ) );
+		context->SetPictureToDefaultL();
+		}
+	
+	// setup the title pane
+	TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
+	CEikStatusPaneBase::TPaneCapabilities subPaneTitle = 
+		StatusPane()->PaneCapabilities( titlePaneUid );
+	if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() )
+		{
+		CAknTitlePane* title = static_cast< CAknTitlePane* >( 
+			StatusPane()->ControlL( titlePaneUid ) );
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_NPRSEARCH_STATION_LIST_BOX_TITLE_RESOURCE );
+		title->SetFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}		
+	}
+
+void CNPRSearchStationListBoxView::CleanupStatusPane()
+	{
+	}
+
+/**
+ *	Creates the top-level container for the view.  You may modify this method's
+ *	contents and the CNPRSearchStationListBox::NewL() signature as needed to initialize the
+ *	container, but the signature for this method is fixed.
+ *	@return new initialized instance of CNPRSearchStationListBox
+ */
+CNPRSearchStationListBox* CNPRSearchStationListBoxView::CreateContainerL()
+	{
+	return CNPRSearchStationListBox::NewL( ClientRect(), NULL, this );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRStation.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,93 @@
+/*
+ ============================================================================
+ Name	: NPRStation.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : Class to wrap all the Station fields 
+ ============================================================================
+ */
+
+#include "NPRStation.h"
+
+
+CNPRStation* CNPRStation::NewLC()
+	{
+	CNPRStation* self = new (ELeave) CNPRStation();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CNPRStation* CNPRStation::NewL()
+	{
+	CNPRStation* self = CNPRStation::NewLC();
+	CleanupStack::Pop(); // self;
+	return self;
+	}
+
+CNPRStation::~CNPRStation()
+	{
+	iName.Close();
+	iFrequency.Close();
+	iMarketCity.Close();
+	}
+
+void CNPRStation::ConstructL()
+	{
+	}
+
+void CNPRStation::SetNameL(const TDesC8& aName)
+	{
+	HBufC* temp = HBufC::NewLC(aName.Length());
+	// copy from 8 to 16 bit descriptor. 
+	temp->Des().Copy(aName);
+
+	if(iName.MaxLength() < temp->Length())
+		{
+		iName.ReAlloc(temp->Length());
+		}
+	iName.Copy(temp->Des());
+	CleanupStack::PopAndDestroy();
+	}
+
+void CNPRStation::SetFrequencyL(const TDesC8& aFrequency)
+	{
+	HBufC* temp = HBufC::NewLC(aFrequency.Length());
+	// copy from 8 to 16 bit descriptor. 
+	temp->Des().Copy(aFrequency);
+
+	if(iFrequency.MaxLength() < temp->Length())
+		{
+		iFrequency.ReAlloc(temp->Length());
+		}
+	iFrequency.Copy(temp->Des());
+	CleanupStack::PopAndDestroy();
+	}
+
+void CNPRStation::SetMarketCityL(const TDesC8& aMarketCity)
+	{
+	HBufC* temp = HBufC::NewLC(aMarketCity.Length());
+	// copy from 8 to 16 bit descriptor. 
+	temp->Des().Copy(aMarketCity);
+
+	if(iMarketCity.MaxLength() < temp->Length())
+		{
+		iMarketCity.ReAlloc(temp->Length());
+		}
+	iMarketCity.Copy(temp->Des());
+	CleanupStack::PopAndDestroy();
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRStationListBox.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,415 @@
+/*
+ ============================================================================
+ Name	: NPRStationListBox.cpp
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : Container for Series60 double style list box to show the NPR's station list
+ ============================================================================
+ */
+
+#include <barsread.h>
+#include <aknlists.h>
+#include <NPR_0xEEB0E481.rsg>
+
+#include "NPRStationListBox.h"
+#include "NPRStationListBoxView.h"
+#include "NPR.hrh"
+#include "NPRStation.h"
+#include "NPRAppUi.h"
+#include "NPRAppEngine.h"
+
+const TInt KFrequencyTab = 20;
+/**
+ * First phase of Symbian two-phase construction. Should not 
+ * contain any code that could leave.
+ */
+CNPRStationListBox::CNPRStationListBox()
+	{
+	iListBox = NULL;
+	iStationArray = static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->Engine().Stations();
+	}
+/** 
+ * Destroy child controls.
+ */
+CNPRStationListBox::~CNPRStationListBox()
+	{
+	delete iListBox;
+	iListBox = NULL;
+	}
+				
+/**
+ * Construct the control (first phase).
+ *  Creates an instance and initializes it.
+ *  Instance is not left on cleanup stack.
+ * @param aRect bounding rectangle
+ * @param aParent owning parent, or NULL
+ * @param aCommandObserver command observer
+ * @return initialized instance of CNPRStationListBox
+ */
+CNPRStationListBox* CNPRStationListBox::NewL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	CNPRStationListBox* self = CNPRStationListBox::NewLC( 
+			aRect, 
+			aParent, 
+			aCommandObserver );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+/**
+ * Construct the control (first phase).
+ *  Creates an instance and initializes it.
+ *  Instance is left on cleanup stack.
+ * @param aRect The rectangle for this window
+ * @param aParent owning parent, or NULL
+ * @param aCommandObserver command observer
+ * @return new instance of CNPRStationListBox
+ */
+CNPRStationListBox* CNPRStationListBox::NewLC( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	CNPRStationListBox* self = new ( ELeave ) CNPRStationListBox();
+	CleanupStack::PushL( self );
+	self->ConstructL( aRect, aParent, aCommandObserver );
+	return self;
+	}
+			
+/**
+ * Construct the control (second phase).
+ *  Creates a window to contain the controls and activates it.
+ * @param aRect bounding rectangle
+ * @param aCommandObserver command observer
+ * @param aParent owning parent, or NULL
+ */ 
+void CNPRStationListBox::ConstructL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	if ( aParent == NULL )
+	    {
+		CreateWindowL();
+	    }
+	else
+	    {
+	    SetContainerWindowL( *aParent );
+	    }
+	iFocusControl = NULL;
+	iCommandObserver = aCommandObserver;
+	InitializeControlsL();
+	SetRect( aRect );
+	ActivateL();
+	}
+			
+/**
+* Return the number of controls in the container (override)
+* @return count
+*/
+TInt CNPRStationListBox::CountComponentControls() const
+	{
+	return ( int ) ELastControl;
+	}
+				
+/**
+* Get the control with the given index (override)
+* @param aIndex Control index [0...n) (limited by #CountComponentControls)
+* @return Pointer to control
+*/
+CCoeControl* CNPRStationListBox::ComponentControl( TInt aIndex ) const
+	{
+	switch ( aIndex )
+		{
+	case EListBox:
+		return iListBox;
+		}
+	return NULL;
+	}
+				
+/**
+ *	Handle resizing of the container. This implementation will lay out
+ *  full-sized controls like list boxes for any screen size, and will layout
+ *  labels, editors, etc. to the size they were given in the UI designer.
+ *  This code will need to be modified to adjust arbitrary controls to
+ *  any screen size.
+ */				
+void CNPRStationListBox::SizeChanged()
+	{
+	CCoeControl::SizeChanged();
+	LayoutControls();
+	}
+				
+/**
+ * Layout components as specified in the UI Designer
+ */
+void CNPRStationListBox::LayoutControls()
+	{
+	iListBox->SetExtent( TPoint( 0, 0 ), iListBox->MinimumSize() );
+	}
+
+void CNPRStationListBox::Listen()
+	{
+	static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->Engine().SendNPRCommandL(EPlayStationStream, KNullDesC());
+	}
+
+/**
+ *	Handle key events.
+ */				
+TKeyResponse CNPRStationListBox::OfferKeyEventL( 
+		const TKeyEvent& aKeyEvent, 
+		TEventCode aType )
+	{
+	if ( aKeyEvent.iCode == EKeyLeftArrow 
+		|| aKeyEvent.iCode == EKeyRightArrow )
+		{
+		// Listbox takes all events even if it doesn't use them
+		return EKeyWasNotConsumed;
+		}
+	
+	if ( iFocusControl != NULL
+		&& iFocusControl->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
+		{
+		return EKeyWasConsumed;
+		}
+	return CCoeControl::OfferKeyEventL( aKeyEvent, aType );
+	}
+				
+/**
+ *	Initialize each control upon creation.
+ */				
+void CNPRStationListBox::InitializeControlsL()
+	{
+	iListBox = new ( ELeave ) CAknDoubleStyle2ListBox;
+	iListBox->SetContainerWindowL( *this );
+	TResourceReader reader;
+	iEikonEnv->CreateResourceReaderLC( reader, R_NPRSTATION_LIST_BOX_LIST_BOX);
+	iListBox->ConstructFromResourceL( reader );
+	CleanupStack::PopAndDestroy(); // reader internal state
+	// the listbox owns the items in the list and will free them
+	iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
+    iListBox->CreateScrollBarFrameL(ETrue);
+    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto);
+	
+	// setup the icon array so graphics-style boxes work
+	SetupListBoxIconsL();
+	
+	// add list items
+	for(TInt i=0; i<iStationArray->Count(); i++)
+		{
+		TInt nameLength = (*iStationArray)[i]->Name().Length();
+		TBuf<64> namePlusFrequency((*iStationArray)[i]->Name());
+		if((*iStationArray)[i]->Frequency().Length()!=0)
+			{
+			for(TInt j=0; j<KFrequencyTab-nameLength;j++)
+				{
+				namePlusFrequency.Append(_L(" "));				
+				}
+			namePlusFrequency.Append((*iStationArray)[i]->Frequency());		
+			}
+	    TBuf<128> listString;
+		CreateListBoxItemL(listString, namePlusFrequency, (*iStationArray)[i]->MarketCity());
+		AddListBoxItemL(iListBox, listString);
+		}
+	
+	iListBox->SetFocus( ETrue );
+	iFocusControl = iListBox;
+	}
+
+/** 
+ * Handle global resource changes, such as scalable UI or skin events (override)
+ */
+void CNPRStationListBox::HandleResourceChange( TInt aType )
+	{
+	CCoeControl::HandleResourceChange( aType );
+	SetRect( iAvkonViewAppUi->View( TUid::Uid( ENPRStationListBoxViewId ) )->ClientRect() );
+	}
+				
+/**
+ *	Draw container contents.
+ */				
+void CNPRStationListBox::Draw( const TRect& aRect ) const
+	{
+	CWindowGc& gc = SystemGc();
+	gc.Clear( aRect );
+	}
+				
+/**
+ *	Add a list box item to a list.
+ */
+void CNPRStationListBox::AddListBoxItemL( 
+		CEikTextListBox* aListBox,
+		const TDesC& aString )
+	{
+	CTextListBoxModel* model = aListBox->Model();
+	CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
+	itemArray->AppendL( aString );
+	aListBox->HandleItemAdditionL();
+	}
+
+/**
+ * Get the array of selected item indices, with respect to the list model.
+ * The array is sorted in ascending order.
+ * The array should be destroyed with two calls to CleanupStack::PopAndDestroy(),
+ * the first with no argument (referring to the internal resource) and the
+ * second with the array pointer.
+ * @return newly allocated array, which is left on the cleanup stack;
+ *	or NULL for empty list. 
+ */
+RArray< TInt >* CNPRStationListBox::GetSelectedListBoxItemsLC( CEikTextListBox* aListBox )
+	{
+	CAknFilteredTextListBoxModel* model = 
+		static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
+	if ( model->NumberOfItems() == 0 )
+		return NULL;
+		
+	// get currently selected indices
+	const CListBoxView::CSelectionIndexArray* selectionIndexes =
+		aListBox->SelectionIndexes();
+	TInt selectedIndexesCount = selectionIndexes->Count();
+	if ( selectedIndexesCount == 0 )
+		return NULL;
+		
+	// copy the indices and sort numerically
+	RArray<TInt>* orderedSelectedIndices = 
+		new (ELeave) RArray< TInt >( selectedIndexesCount );
+	
+	// push the allocated array
+	CleanupStack::PushL( orderedSelectedIndices );
+	
+	// dispose the array resource
+	CleanupClosePushL( *orderedSelectedIndices );
+	
+	// see if the search field is enabled
+	CAknListBoxFilterItems* filter = model->Filter();
+	if ( filter != NULL )
+		{
+		// when filtering enabled, translate indices back to underlying model
+		for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
+			{
+			TInt filteredItem = ( *selectionIndexes ) [ idx ];
+			TInt actualItem = filter->FilteredItemIndex ( filteredItem );
+			orderedSelectedIndices->InsertInOrder( actualItem );
+			}
+		}
+	else
+		{
+		// the selection indices refer directly to the model
+		for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
+			orderedSelectedIndices->InsertInOrder( ( *selectionIndexes ) [ idx ] );
+		}	
+		
+	return orderedSelectedIndices;
+	}
+
+/**
+ * Delete the selected item or items from the list box.
+ */
+void CNPRStationListBox::DeleteSelectedListBoxItemsL( CEikTextListBox* aListBox )
+	{
+	CAknFilteredTextListBoxModel* model = 
+		static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
+	if ( model->NumberOfItems() == 0 )
+		return;
+	
+	RArray< TInt >* orderedSelectedIndices = GetSelectedListBoxItemsLC( aListBox );		
+	if ( !orderedSelectedIndices )
+		return;
+		
+	// Delete selected items from bottom up so indices don't change on us
+	CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
+	TInt currentItem = 0;
+	
+	for ( TInt idx = orderedSelectedIndices->Count(); idx-- > 0; ) 
+		{
+		currentItem = ( *orderedSelectedIndices )[ idx ];
+		itemArray->Delete ( currentItem );
+		}
+	
+	// dispose the array resources
+	CleanupStack::PopAndDestroy();
+	
+	// dispose the array pointer
+	CleanupStack::PopAndDestroy( orderedSelectedIndices );
+	
+	// refresh listbox's cursor now that items are deleted
+	AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(
+		aListBox, currentItem, ETrue );
+	}
+
+/**
+ *	Get the listbox.
+ */
+CAknDoubleStyle2ListBox* CNPRStationListBox::ListBox()
+	{
+	return iListBox;
+	}
+
+/**
+ *	Create a list box item with the given column values.
+ */
+void CNPRStationListBox::CreateListBoxItemL( TDes& aBuffer, 
+		const TDesC& aMainText,
+		const TDesC& aSecondaryText )
+	{
+	_LIT ( KStringHeader, "\t%S\t%S" );
+	
+	aBuffer.Format( KStringHeader(), &aMainText, &aSecondaryText );
+	} 
+				
+/**
+ *	Add an item to the list by reading the text items from the array resource
+ *	and setting a single image property (if available) from an index
+ *	in the list box's icon array.
+ *	@param aResourceId id of an ARRAY resource containing the textual
+ *	items in the columns
+ *	
+ */
+void CNPRStationListBox::AddListBoxResourceArrayItemL( TInt aResourceId )
+	{
+	CDesCArray* array = iCoeEnv->ReadDesCArrayResourceL( aResourceId );
+	CleanupStack::PushL( array );
+	// This is intended to be large enough, but if you get 
+	// a USER 11 panic, consider reducing string sizes.
+	TBuf<512> listString; 
+	CreateListBoxItemL( listString, ( *array ) [ 0 ], ( *array ) [ 1 ] );
+	AddListBoxItemL( iListBox, listString );
+	CleanupStack::PopAndDestroy( array );
+	} 
+				
+/**
+ *	Set up the list's icon array.
+ */
+void CNPRStationListBox::SetupListBoxIconsL()
+	{
+	CArrayPtr< CGulIcon >* icons = NULL;		
+	
+	if(icons != NULL)
+		{
+		iListBox->ItemDrawer()->ColumnData()->SetIconArray(icons);
+		}
+	}
+
+/** 
+ *	Handle commands relating to markable lists.
+ */
+TBool CNPRStationListBox::HandleMarkableListCommandL(TInt /*aCommand*/)
+	{
+	TBool result = EFalse;
+	return result;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRStationListBoxView.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,212 @@
+/*
+ ==========================================================================================
+ Name	: NPRStationListBoxView.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description :  AknView for wrapping the container to show the NPR's station list
+ ==========================================================================================
+ */
+
+#include <barsread.h>
+#include <akncontext.h>
+#include <akntitle.h>
+#include <NPR_0xEEB0E481.rsg>
+
+#include "NPR.hrh"
+#include "NPRStationListBoxView.h"
+#include "NPRStationListBox.h"
+#include "NPRAppUi.h"
+#include "NPRAppEngine.h"
+
+/**
+ * First phase of Symbian two-phase construction. Should not contain any
+ * code that could leave.
+ */
+CNPRStationListBoxView::CNPRStationListBoxView()
+	{
+	iNPRStationListBox = NULL;
+	}
+
+/** 
+ * The view's destructor removes the container from the control
+ * stack and destroys it.
+ */
+CNPRStationListBoxView::~CNPRStationListBoxView()
+	{
+	delete iNPRStationListBox;
+	iNPRStationListBox = NULL;
+	}
+
+/**
+ * Symbian two-phase constructor.
+ * This creates an instance then calls the second-phase constructor
+ * without leaving the instance on the cleanup stack.
+ * @return new instance of CNPRStationListBoxView
+ */
+CNPRStationListBoxView* CNPRStationListBoxView::NewL()
+	{
+	CNPRStationListBoxView* self = CNPRStationListBoxView::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+/**
+ * Symbian two-phase constructor.
+ * This creates an instance, pushes it on the cleanup stack,
+ * then calls the second-phase constructor.
+ * @return new instance of CNPRStationListBoxView
+ */
+CNPRStationListBoxView* CNPRStationListBoxView::NewLC()
+	{
+	CNPRStationListBoxView* self = new ( ELeave ) CNPRStationListBoxView();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	return self;
+	}
+
+/**
+ * Second-phase constructor for view.  
+ * Initialize contents from resource.
+ */ 
+void CNPRStationListBoxView::ConstructL()
+	{
+	BaseConstructL( R_NPRSTATION_LIST_BOX_NPRSTATION_LIST_BOX_VIEW);
+	}
+
+/**
+ * @return The UID for this view
+ */
+TUid CNPRStationListBoxView::Id() const
+	{
+	return TUid::Uid( ENPRStationListBoxViewId );
+	}
+
+/**
+ * Handle a command for this view (override)
+ * @param aCommand command id to be handled
+ */
+void CNPRStationListBoxView::HandleCommandL( TInt aCommand )
+	{
+	TBool commandHandled = EFalse;
+	switch(aCommand)
+		{// code to dispatch to the AknView's menu and CBA commands is generated here
+		case EListen:
+			{
+			iNPRStationListBox->Listen();
+			commandHandled = ETrue;
+			break;
+			}
+		case EAknSoftkeyBack:
+			{
+			static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->ActivateLocalViewL(TUid::Uid(ENPRSearchStationListBoxViewId));
+			commandHandled = ETrue;
+			break;
+			}
+		default:
+			break;
+		}
+	}
+
+/**
+ *	Handles user actions during activation of the view, 
+ *	such as initializing the content.
+ */
+void CNPRStationListBoxView::DoActivateL( 
+		const TVwsViewId& /*aPrevViewId*/,
+		TUid /*aCustomMessageId*/,
+		const TDesC8& /*aCustomMessage*/ )
+	{
+	SetupStatusPaneL();
+	if ( iNPRStationListBox == NULL )
+		{
+		iNPRStationListBox = CreateContainerL();
+		iNPRStationListBox->SetMopParent( this );
+		AppUi()->AddToStackL( *this, iNPRStationListBox );
+		} 
+	}
+
+/**
+ */
+void CNPRStationListBoxView::DoDeactivate()
+	{
+	CleanupStatusPane();
+	if ( iNPRStationListBox != NULL )
+		{
+		AppUi()->RemoveFromViewStack( *this, iNPRStationListBox );
+		delete iNPRStationListBox;
+		iNPRStationListBox = NULL;
+		}
+	}
+
+/** 
+ * Handle status pane size change for this view (override)
+ */
+void CNPRStationListBoxView::HandleStatusPaneSizeChange()
+	{
+	CAknView::HandleStatusPaneSizeChange();
+	
+	// this may fail, but we're not able to propagate exceptions here
+	TVwsViewId view;
+	AppUi()->GetActiveViewId( view );
+	if ( view.iViewUid == Id() )
+		{
+		TInt result;
+		TRAP( result, SetupStatusPaneL() );
+		}
+	}
+
+void CNPRStationListBoxView::SetupStatusPaneL()
+	{
+	// reset the context pane
+	TUid contextPaneUid = TUid::Uid( EEikStatusPaneUidContext );
+	CEikStatusPaneBase::TPaneCapabilities subPaneContext = 
+		StatusPane()->PaneCapabilities( contextPaneUid );
+	if ( subPaneContext.IsPresent() && subPaneContext.IsAppOwned() )
+		{
+		CAknContextPane* context = static_cast< CAknContextPane* > ( 
+			StatusPane()->ControlL( contextPaneUid ) );
+		context->SetPictureToDefaultL();
+		}
+	
+	// setup the title pane
+	TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
+	CEikStatusPaneBase::TPaneCapabilities subPaneTitle = 
+		StatusPane()->PaneCapabilities( titlePaneUid );
+	if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() )
+		{
+		CAknTitlePane* title = static_cast< CAknTitlePane* >( 
+			StatusPane()->ControlL( titlePaneUid ) );
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_NPRSTATION_LIST_BOX_TITLE_RESOURCE);
+		title->SetFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+				
+	}
+
+void CNPRStationListBoxView::CleanupStatusPane()
+	{
+	}
+
+/**
+ *	Creates the top-level container for the view.  You may modify this method's
+ *	contents and the CNPRStationListBox::NewL() signature as needed to initialize the
+ *	container, but the signature for this method is fixed.
+ *	@return new initialized instance of CNPRStationListBox
+ */
+CNPRStationListBox* CNPRStationListBoxView::CreateContainerL()
+	{
+	return CNPRStationListBox::NewL( ClientRect(), NULL, this );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRStationXmlParser.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,210 @@
+/*
+ ============================================================================
+ Name	: NPRStationXmlParser.cpp
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : Station xml parser
+ ============================================================================
+ */
+
+#include "NPRDocument.h"
+#include "NPRStationXmlParser.h"
+#include "NPRStation.h"
+
+CNPRStationXmlParser* CNPRStationXmlParser::NewLC(RPointerArray<CNPRStation>* aStationArray)
+	{
+	CNPRStationXmlParser* self = new (ELeave) CNPRStationXmlParser(aStationArray);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CNPRStationXmlParser* CNPRStationXmlParser::NewL(RPointerArray<CNPRStation>* aStationArray)
+	{
+	CNPRStationXmlParser* self = CNPRStationXmlParser::NewLC(aStationArray);
+	CleanupStack::Pop(); // self;
+	return self;
+	}
+
+CNPRStationXmlParser::CNPRStationXmlParser(RPointerArray<CNPRStation>* aStationArray)
+:iStationArray(aStationArray)
+	{
+	// No implementation required
+	}
+
+CNPRStationXmlParser::~CNPRStationXmlParser()
+	{
+	}
+
+void CNPRStationXmlParser::ConstructL()
+	{
+	iState = ENPRStationStateIdle;
+	}
+
+void CNPRStationXmlParser::OnStartDocumentL(const RDocumentParameters& /* aDocParam */, TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	}
+
+void CNPRStationXmlParser::OnEndDocumentL(TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	}
+
+HBufC* CNPRStationXmlParser::Copy8To16LC(const TDesC8& aDes)
+        {
+        HBufC* buf16 = HBufC::NewLC(aDes.Length());
+        buf16->Des().Copy(aDes);
+        return buf16;
+        }
+
+void CNPRStationXmlParser::OnStartElementL(
+		const RTagInfo& aElement, 
+		const RAttributeArray& aAttributes, 
+		TInt  aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	const TDesC8& tagName = aElement.LocalName().DesC();
+	if (tagName.CompareF(_L8("station"))==0)
+		{
+		iState = ENPRStationStateStation;
+		iCurrentStation = CNPRStation::NewL(); 
+		// find the story Id attribute
+		TInt count = aAttributes.Count();
+		for (TInt i = 0 ; i < count ; i++)
+			{
+			 const RAttribute& attribute = aAttributes[i];
+			 const RTagInfo& nameInfo = attribute.Attribute();
+
+			 const TDesC8& localName8 = nameInfo.LocalName().DesC();
+			 const TDesC8& value8 = attribute.Value().DesC();
+
+			 HBufC* localName16 = Copy8To16LC(localName8);
+			 HBufC* value16 = Copy8To16LC(value8);
+			 if (localName16->CompareF(_L("id")) == 0 )
+				 {
+				 TLex lex(value16->Des());
+				 TInt v = 0;
+				 lex.Val(v);
+				 iCurrentStation->SetStationId( v );
+				 }
+			 CleanupStack::PopAndDestroy(2); // value16 and localName16
+			}
+		}
+	else if (tagName.CompareF(_L8("name"))==0 && iState == ENPRStationStateStation)
+			{
+			iState = ENPRStationStateName;
+			}
+	else if (tagName.CompareF(_L8("frequency"))==0 && iState == ENPRStationStateNameEnd)
+			{
+			iState = ENPRStationStateFrequency;
+			}
+	else if (tagName.CompareF(_L8("marketCity"))==0 && iState == ENPRStationStateFrequencyEnd)
+			{
+			iState = ENPRStationStateMarketCity;
+			}
+	}
+
+void CNPRStationXmlParser::OnEndElementL(const RTagInfo& aElement, TInt aErrorCode )
+	{
+	User::LeaveIfError(aErrorCode);
+	const TDesC8& tagName = aElement.LocalName().DesC();
+	if (tagName.CompareF(_L8("station"))== 0 && iState == ENPRStationStateMarketCityEnd) 
+		{
+		iState = ENPRStationStateIdle; 
+		iStationArray->AppendL(iCurrentStation);
+		iCurrentStation = NULL;
+		} 
+	else if (tagName.CompareF(_L8("name"))== 0 && iState == ENPRStationStateName)
+		{ 
+		iState = ENPRStationStateNameEnd;
+		} 	
+	else if (tagName.CompareF(_L8("frequency"))== 0 && iState == ENPRStationStateFrequency)
+		{
+		iState = ENPRStationStateFrequencyEnd;
+		}	
+	else if (tagName.CompareF(_L8("marketCity"))== 0 && iState == ENPRStationStateMarketCity)
+		{
+		iState = ENPRStationStateMarketCityEnd;
+		}
+	}
+
+void CNPRStationXmlParser::OnContentL(const TDesC8&  aBytes, TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	
+	switch(iState)
+		{
+		case ENPRStationStateName:
+			{
+			iCurrentStation->SetNameL(aBytes);
+			break;
+			}
+		case ENPRStationStateFrequency:
+			{
+			iCurrentStation->SetFrequencyL(aBytes);
+			break; 
+			}
+		case ENPRStationStateMarketCity:
+			{
+			iCurrentStation->SetMarketCityL(aBytes);
+			break;
+			}
+		
+		default:
+			iState = iState; // for debugging. 
+			break;
+		}
+	}
+
+void CNPRStationXmlParser::OnStartPrefixMappingL(
+		const RString& /* aPrefix */, 
+		const RString& /* aUri */, 
+		TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	}
+
+void CNPRStationXmlParser::OnEndPrefixMappingL(const RString& /* aPrefix */, TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	}
+
+void CNPRStationXmlParser::OnIgnorableWhiteSpaceL(const TDesC8& /* aBytes */, TInt /* aErrorCode*/ )
+	{
+	}
+
+void CNPRStationXmlParser::OnSkippedEntityL(const RString& /* aName */, TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	}
+
+void CNPRStationXmlParser::OnProcessingInstructionL(
+		const TDesC8& /* aTarget */ , 
+		const TDesC8& /* aData */ , 
+		TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	}
+
+void CNPRStationXmlParser::OnError(TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	}
+
+TAny* CNPRStationXmlParser::GetExtendedInterface(const TInt32 /* aUid */ ) 
+	{
+	return NULL;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRStory.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,138 @@
+/*
+ ============================================================================
+ Name	: NPRStory.cpp
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution.
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : NPR's xml story parser
+ ============================================================================
+ */
+
+#include "NPRStory.h"
+
+const int KUrlLength = 256; 
+
+CNPRStory* CNPRStory::NewLC()
+	{
+	CNPRStory* self = new (ELeave) CNPRStory();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CNPRStory* CNPRStory::NewL()
+	{
+	CNPRStory* self = CNPRStory::NewLC();
+	CleanupStack::Pop(); // self;
+	return self;
+	}
+
+CNPRStory::CNPRStory()
+:iTitle(NULL),iTeaser(NULL),iMp3Url(NULL)
+	{
+	// No implementation required
+	}
+
+CNPRStory::~CNPRStory()
+	{
+	iTitle.Close();
+	iTeaser.Close();
+	iText.Close();
+	iMp3Url.Close(); 
+	iThumbnailUrl.Close();
+	}
+
+void CNPRStory::ConstructL()
+	{
+	}
+
+void CNPRStory::SetTitleL(const TDesC8& aTitle)
+	{
+	HBufC* temp = HBufC::NewLC(aTitle.Length());
+	// copy from 8 to 16 bit descriptor. 
+	temp->Des().Copy(aTitle);
+
+	if(iTitle.MaxLength() < temp->Length())
+		{
+		iTitle.ReAlloc(temp->Length());
+		}
+	iTitle.Copy(temp->Des());
+	CleanupStack::PopAndDestroy();
+	}
+
+void CNPRStory::SetTeaserL(const TDesC8& aTeaser)
+	{
+	HBufC* temp = HBufC::NewLC(aTeaser.Length());
+	// copy from 8 to 16 bit descriptor. 
+	temp->Des().Copy(aTeaser);
+
+	// append it 
+	const TInt newLength = iTeaser.Length() + temp->Length();
+	if(iTeaser.MaxLength() < newLength)
+		{
+		iTeaser.ReAlloc(newLength);
+		}
+	iTeaser.Append(temp->Des());
+	CleanupStack::PopAndDestroy();
+	}
+
+void CNPRStory::SetTextL(const TDesC8& aText)
+	{
+	HBufC* temp = HBufC::NewLC(aText.Length());
+	// copy from 8 to 16 bit descriptor. 
+	temp->Des().Copy(aText);
+	// append it 
+
+	const TInt newLength = iText.Length() + temp->Length();
+	if(iText.MaxLength() < newLength)
+		{
+		iText.ReAlloc(newLength);
+		}
+	iText.Append(temp->Des());
+
+	CleanupStack::PopAndDestroy();
+	}
+
+// The XML parser will call this multiple times to construct the mp3url. 
+void CNPRStory::SetMp3UrlL(const TDesC8& aMp3Url)
+	{
+	HBufC* temp = HBufC::NewLC(aMp3Url.Length());
+	// copy from 8 to 16 bit descriptor. 
+	temp->Des().Copy(aMp3Url);
+	
+	// append it 
+	const TInt newLength = iMp3Url.Length() + temp->Length();
+	if(iMp3Url.MaxLength() < newLength)
+		{
+		iMp3Url.ReAlloc(newLength);
+		}
+	iMp3Url.Append(temp->Des());
+	CleanupStack::PopAndDestroy();
+	}
+
+void CNPRStory::SetThumbnailUrlL(const TDesC8& aThumbUrl)
+	{
+	HBufC* temp = HBufC::NewLC(aThumbUrl.Length());
+	// copy from 8 to 16 bit descriptor. 
+	temp->Des().Copy(aThumbUrl);
+
+	if(iThumbnailUrl.MaxLength() < temp->Length())
+		{
+		iThumbnailUrl.ReAlloc(temp->Length());
+		}
+	iThumbnailUrl.Copy(temp->Des());
+	CleanupStack::PopAndDestroy();
+	}
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRStoryListBox.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,496 @@
+/*
+ ============================================================================
+ Name	: NPRStoryListBox.cpp
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description : Container for Series60 double style list box to show the NPR's story list
+ ============================================================================
+ */
+
+#include <barsread.h>
+#include <aknlists.h>
+#include <akniconarray.h>
+#include <NPR_0xEEB0E481.rsg>
+#include <list_icons.mbg>
+
+#include "NPRStoryListBox.h"
+#include "NPRStoryListBoxView.h"
+#include "NPR.hrh"
+#include "NPRAppUi.h"
+#include "NPRAppEngine.h"
+#include "NPRHtmlCreator.h"
+
+_LIT(KStringHeader, "%d\t%S\t%S" );
+_LIT(KTestUiFile, "\\resource\\apps\\list_icons.mbm");
+				
+/**
+ * Construct the control (first phase).
+ *  Creates an instance and initializes it.
+ *  Instance is not left on cleanup stack.
+ * @param aRect bounding rectangle
+ * @param aParent owning parent, or NULL
+ * @param aCommandObserver command observer
+ * @return initialized instance of CNPRStoryListBox
+ */
+CNPRStoryListBox* CNPRStoryListBox::NewL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	CNPRStoryListBox* self = CNPRStoryListBox::NewLC( 
+			aRect, 
+			aParent, 
+			aCommandObserver );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+/**
+ * Construct the control (first phase).
+ *  Creates an instance and initializes it.
+ *  Instance is left on cleanup stack.
+ * @param aRect The rectangle for this window
+ * @param aParent owning parent, or NULL
+ * @param aCommandObserver command observer
+ * @return new instance of CNPRStoryListBox
+ */
+CNPRStoryListBox* CNPRStoryListBox::NewLC( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	CNPRStoryListBox* self = new ( ELeave ) CNPRStoryListBox();
+	CleanupStack::PushL( self );
+	self->ConstructL( aRect, aParent, aCommandObserver );
+	return self;
+	}
+			
+/**
+ * First phase of Symbian two-phase construction. Should not 
+ * contain any code that could leave.
+ */
+CNPRStoryListBox::CNPRStoryListBox()
+	{
+	iListBox = NULL;
+	iStoryArray = static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->Engine().Stories();
+	}
+/** 
+ * Destroy child controls.
+ */
+CNPRStoryListBox::~CNPRStoryListBox()
+	{
+	delete iHtmlCreator;
+	delete iListBox;
+	iListBox = NULL;
+	}
+
+/**
+ * Construct the control (second phase).
+ *  Creates a window to contain the controls and activates it.
+ * @param aRect bounding rectangle
+ * @param aCommandObserver command observer
+ * @param aParent owning parent, or NULL
+ */ 
+void CNPRStoryListBox::ConstructL( 
+		const TRect& aRect, 
+		const CCoeControl* aParent, 
+		MEikCommandObserver* aCommandObserver )
+	{
+	if ( aParent == NULL )
+	    {
+		CreateWindowL();
+	    }
+	else
+	    {
+	    SetContainerWindowL( *aParent );
+	    }
+	iFocusControl = NULL;
+	iCommandObserver = aCommandObserver;
+	iHtmlCreator = CNPRHtmlCreator::NewL();	
+	
+	InitializeControlsL();
+	SetRect( aRect );
+	ActivateL();
+	}
+			
+/**
+* Return the number of controls in the container (override)
+* @return count
+*/
+TInt CNPRStoryListBox::CountComponentControls() const
+	{
+	return ( int ) ELastControl;
+	}
+				
+/**
+* Get the control with the given index (override)
+* @param aIndex Control index [0...n) (limited by #CountComponentControls)
+* @return Pointer to control
+*/
+CCoeControl* CNPRStoryListBox::ComponentControl( TInt aIndex ) const
+	{
+	switch(aIndex)
+		{
+	case EListBox:
+		return iListBox;
+		}
+	return NULL;
+	}
+				
+/**
+ *	Handle resizing of the container. This implementation will lay out
+ *  full-sized controls like list boxes for any screen size, and will layout
+ *  labels, editors, etc. to the size they were given in the UI designer.
+ *  This code will need to be modified to adjust arbitrary controls to
+ *  any screen size.
+ */				
+void CNPRStoryListBox::SizeChanged()
+	{
+	CCoeControl::SizeChanged();
+	LayoutControls();
+	}
+				
+/**
+ * Layout components as specified in the UI Designer
+ */
+void CNPRStoryListBox::LayoutControls()
+	{
+	iListBox->SetExtent( TPoint( 0, 0 ), iListBox->MinimumSize() );
+	}
+
+/**
+ *	Handle key events.
+ */				
+TKeyResponse CNPRStoryListBox::OfferKeyEventL( 
+		const TKeyEvent& aKeyEvent, 
+		TEventCode aType )
+	{
+	if ( aKeyEvent.iCode == EKeyLeftArrow 
+		|| aKeyEvent.iCode == EKeyRightArrow )
+		{
+		// Listbox takes all events even if it doesn't use them
+		return EKeyWasNotConsumed;
+		}
+
+	if ( iFocusControl != NULL && aKeyEvent.iCode == EKeyDevice3)
+		{
+		ShowSelectedStoryL();
+		return EKeyWasConsumed;
+		}
+
+	if ( iFocusControl != NULL
+		&& iFocusControl->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
+		{
+		return EKeyWasConsumed;
+		}
+	return CCoeControl::OfferKeyEventL( aKeyEvent, aType );
+	}
+				
+/**
+ *	Initialize each control upon creation.
+ */				
+void CNPRStoryListBox::InitializeControlsL()
+	{
+	iListBox = new ( ELeave ) CAknDoubleLargeStyleListBox;
+	iListBox->SetContainerWindowL( *this );
+		{
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_NPRSTORY_LIST_BOX_LIST_BOX );
+		iListBox->ConstructFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+	// the listbox owns the items in the list and will free them
+	iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
+    iListBox->CreateScrollBarFrameL(ETrue);
+    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto);
+	
+	SetupListBoxIconsL();
+	// add list items
+	for(TInt i=0; i<iStoryArray->Count(); i++)
+		{
+		HBufC* story = HBufC::NewLC(KStringHeader().Length()
+				+ (*iStoryArray)[i]->Title().Length()
+				+ (*iStoryArray)[i]->Teaser().Length()
+				);
+		TPtr storyPtr = story->Des();
+		CreateListBoxItemL(storyPtr, TInt(0), (*iStoryArray)[i]->Title(), (*iStoryArray)[i]->Teaser());
+		AddListBoxItemL(iListBox, storyPtr);
+		CleanupStack::PopAndDestroy(story);
+		}
+	
+	iListBox->SetFocus( ETrue );
+	iFocusControl = iListBox;	
+	}
+
+/** 
+ * Handle global resource changes, such as scalable UI or skin events (override)
+ */
+void CNPRStoryListBox::HandleResourceChange( TInt aType )
+	{
+	CCoeControl::HandleResourceChange( aType );
+	SetRect( iAvkonViewAppUi->View( TUid::Uid( ENPRStoryListBoxViewId ) )->ClientRect() );
+	}
+				
+/**
+ *	Draw container contents.
+ */				
+void CNPRStoryListBox::Draw( const TRect& aRect ) const
+	{
+	CWindowGc& gc = SystemGc();
+	gc.Clear( aRect );
+	}
+				
+/**
+ *	Add a list box item to a list.
+ */
+void CNPRStoryListBox::AddListBoxItemL( 
+		CEikTextListBox* aListBox,
+		const TDesC& aString )
+	{
+	CTextListBoxModel* model = aListBox->Model();
+	CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
+	itemArray->AppendL( aString );
+	aListBox->HandleItemAdditionL();
+	}
+
+/**
+ * Get the array of selected item indices, with respect to the list model.
+ * The array is sorted in ascending order.
+ * The array should be destroyed with two calls to CleanupStack::PopAndDestroy(),
+ * the first with no argument (referring to the internal resource) and the
+ * second with the array pointer.
+ * @return newly allocated array, which is left on the cleanup stack;
+ *	or NULL for empty list. 
+ */
+RArray< TInt >* CNPRStoryListBox::GetSelectedListBoxItemsLC( CEikTextListBox* aListBox )
+	{
+	CAknFilteredTextListBoxModel* model = 
+		static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
+	if ( model->NumberOfItems() == 0 )
+		return NULL;
+		
+	// get currently selected indices
+	const CListBoxView::CSelectionIndexArray* selectionIndexes =
+		aListBox->SelectionIndexes();
+	TInt selectedIndexesCount = selectionIndexes->Count();
+	if ( selectedIndexesCount == 0 )
+		return NULL;
+		
+	// copy the indices and sort numerically
+	RArray<TInt>* orderedSelectedIndices = 
+		new (ELeave) RArray< TInt >( selectedIndexesCount );
+	
+	// push the allocated array
+	CleanupStack::PushL( orderedSelectedIndices );
+	
+	// dispose the array resource
+	CleanupClosePushL( *orderedSelectedIndices );
+	
+	// see if the search field is enabled
+	CAknListBoxFilterItems* filter = model->Filter();
+	if ( filter != NULL )
+		{
+		// when filtering enabled, translate indices back to underlying model
+		for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
+			{
+			TInt filteredItem = ( *selectionIndexes ) [ idx ];
+			TInt actualItem = filter->FilteredItemIndex ( filteredItem );
+			orderedSelectedIndices->InsertInOrder( actualItem );
+			}
+		}
+	else
+		{
+		// the selection indices refer directly to the model
+		for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
+			orderedSelectedIndices->InsertInOrder( ( *selectionIndexes ) [ idx ] );
+		}	
+		
+	return orderedSelectedIndices;
+	}
+
+/**
+ * Delete the selected item or items from the list box.
+ */
+void CNPRStoryListBox::DeleteSelectedListBoxItemsL( CEikTextListBox* aListBox )
+	{
+	CAknFilteredTextListBoxModel* model = 
+		static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
+	if ( model->NumberOfItems() == 0 )
+		return;
+	
+	RArray< TInt >* orderedSelectedIndices = GetSelectedListBoxItemsLC( aListBox );		
+	if ( !orderedSelectedIndices )
+		return;
+		
+	// Delete selected items from bottom up so indices don't change on us
+	CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
+	TInt currentItem = 0;
+	
+	for ( TInt idx = orderedSelectedIndices->Count(); idx-- > 0; ) 
+		{
+		currentItem = ( *orderedSelectedIndices )[ idx ];
+		itemArray->Delete ( currentItem );
+		}
+	
+	// dispose the array resources
+	CleanupStack::PopAndDestroy();
+	
+	// dispose the array pointer
+	CleanupStack::PopAndDestroy( orderedSelectedIndices );
+	
+	// refresh listbox's cursor now that items are deleted
+	AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(
+		aListBox, currentItem, ETrue );
+	}
+
+/**
+ *	Get the listbox.
+ */
+CAknDoubleLargeStyleListBox* CNPRStoryListBox::ListBox()
+	{
+	return iListBox;
+	}
+
+/**
+ *	Create a list box item with the given column values.
+ */
+void CNPRStoryListBox::CreateListBoxItemL( TDes& aBuffer, 
+		TInt aIconIndex,
+		const TDesC& aMainText,
+		const TDesC& aSecondaryText )
+	{
+	
+	aBuffer.Format( KStringHeader(), aIconIndex, &aMainText, &aSecondaryText);
+	} 
+				
+/**
+ *	Add an item to the list by reading the text items from the array resource
+ *	and setting a single image property (if available) from an index
+ *	in the list box's icon array.
+ *	@param aResourceId id of an ARRAY resource containing the textual
+ *	items in the columns
+ *	@param aIconIndex the index in the icon array, or -1
+ */
+void CNPRStoryListBox::AddListBoxResourceArrayItemL( TInt aResourceId, TInt aIconIndex )
+	{
+	CDesCArray* array = iCoeEnv->ReadDesCArrayResourceL( aResourceId );
+	CleanupStack::PushL( array );
+	// This is intended to be large enough, but if you get 
+	// a USER 11 panic, consider reducing string sizes.
+	TBuf<512> listString; 
+	CreateListBoxItemL( listString, aIconIndex, (*array) [0], (*array )[1]);
+	AddListBoxItemL( iListBox, listString );
+	CleanupStack::PopAndDestroy( array );
+	} 
+				
+/**
+ *	Set up the list's icon array.
+ */
+void CNPRStoryListBox::SetupListBoxIconsL()
+	{
+	CArrayPtr< CGulIcon >* icons = new (ELeave) CAknIconArray( 1 );
+	CleanupStack::PushL( icons );
+	
+	icons->AppendL(LoadAndScaleIconL(KTestUiFile,
+									 EMbmList_iconsNpr_symbian_generic,
+									 EMbmList_iconsNpr_symbian_generic_mask,
+									 NULL, EAspectRatioPreserved ));
+
+	CleanupStack::Pop( icons );
+
+	if ( icons != NULL )
+		{
+		iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
+		}
+	}
+
+/** 
+ *	Handle commands relating to markable lists.
+ */
+TBool CNPRStoryListBox::HandleMarkableListCommandL(TInt /*aCommand*/)
+	{
+	return EFalse;
+	}
+
+/**
+ *	This routine loads and scales a bitmap or icon.
+ *
+ *	@param aFileName the MBM or MIF filename
+ *	@param aBitmapId the bitmap id
+ *	@param aMaskId the mask id or -1 for none
+ *	@param aSize the TSize for the icon, or NULL to use real size
+ *	@param aScaleMode one of the EAspectRatio* enums when scaling
+ *
+ */
+CGulIcon* CNPRStoryListBox::LoadAndScaleIconL( 
+		const TDesC& aFileName,
+		TInt aBitmapId, 
+		TInt aMaskId, 
+		TSize* aSize, 
+		TScaleMode aScaleMode )
+	{
+	CFbsBitmap* bitmap;
+	CFbsBitmap* mask;
+	TRAPD(err, AknIconUtils::CreateIconL( bitmap, mask, aFileName, aBitmapId, aMaskId ));
+	
+	TSize size;
+	if ( aSize == NULL )
+		{
+		// Use size from the image header.  In case of SVG,
+		// we preserve the image data for a while longer, since ordinarily
+		// it is disposed at the first GetContentDimensions() or SetSize() call.
+		AknIconUtils::PreserveIconData( bitmap );
+		AknIconUtils::GetContentDimensions( bitmap, size );
+		}
+	else
+		{
+		size = *aSize;
+		}
+	
+	AknIconUtils::SetSize( bitmap, size, aScaleMode );
+	AknIconUtils::SetSize( mask, size, aScaleMode );
+	
+	if ( aSize == NULL )
+		{
+		AknIconUtils::DestroyIconData( bitmap );
+		}
+	
+	return CGulIcon::NewL( bitmap, mask );
+	}
+
+TInt CNPRStoryListBox::CurrentItemIndex()
+	{
+	return iListBox->CurrentItemIndex();
+	}
+
+void CNPRStoryListBox::ShowSelectedStoryL()
+	{
+//	TInt index = CurrentItemIndex();
+//	static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->
+//	ActivateLocalViewL(TUid::Uid(ENPRStoryViewerContainerViewId), TUid::Uid(index),KNullDesC8);//TO DO use custum message instead of custum command
+
+	TInt currentItem = iListBox->CurrentItemIndex();
+	if (currentItem==-1)
+		{
+		return;
+		}
+	
+	CNPRStory* story=(*iStoryArray)[currentItem];
+	
+	//TODO - Move this code into the browser container, so it is seperate from the listbox	
+	iHtmlCreator->CreateHtmlFileL(story);
+
+	static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->ActivateLocalViewL(TUid::Uid(ENPRBrowserViewId));
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRStoryListBoxView.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,211 @@
+/*
+ ==========================================================================================
+ Name	: NPRStoryListBoxView.h
+ Author	: Symsource
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symsource
+ 
+ Contributors:
+ - Symsource
+ 
+ Description :  AknView for wrapping the container to show the NPR's story list
+ ==========================================================================================
+ */
+
+#include <barsread.h>
+#include <aknlists.h>
+#include <akncontext.h>
+#include <akntitle.h>
+#include <NPR_0xEEB0E481.rsg>
+
+#include "NPR.hrh"
+#include "NPRStoryListBoxView.h"
+#include "NPRStoryListBox.h"
+#include "NPRAppUi.h"
+#include "NPRAppEngine.h"
+
+/**
+ * First phase of Symbian two-phase construction. Should not contain any
+ * code that could leave.
+ */
+CNPRStoryListBoxView::CNPRStoryListBoxView()
+	{
+	iNPRStoryListBox = NULL;
+	}
+
+/** 
+ * The view's destructor removes the container from the control
+ * stack and destroys it.
+ */
+CNPRStoryListBoxView::~CNPRStoryListBoxView()
+	{
+	delete iNPRStoryListBox;
+	iNPRStoryListBox = NULL;
+	}
+
+/**
+ * Symbian two-phase constructor.
+ * This creates an instance then calls the second-phase constructor
+ * without leaving the instance on the cleanup stack.
+ * @return new instance of CNPRStoryListBoxView
+ */
+CNPRStoryListBoxView* CNPRStoryListBoxView::NewL()
+	{
+	CNPRStoryListBoxView* self = CNPRStoryListBoxView::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+/**
+ * Symbian two-phase constructor.
+ * This creates an instance, pushes it on the cleanup stack,
+ * then calls the second-phase constructor.
+ * @return new instance of CNPRStoryListBoxView
+ */
+CNPRStoryListBoxView* CNPRStoryListBoxView::NewLC()
+	{
+	CNPRStoryListBoxView* self = new ( ELeave ) CNPRStoryListBoxView();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	return self;
+	}
+
+/**
+ * Second-phase constructor for view.  
+ * Initialize contents from resource.
+ */ 
+void CNPRStoryListBoxView::ConstructL()
+	{
+	BaseConstructL( R_NPRSTORY_LIST_BOX_NPRSTORY_LIST_BOX_VIEW );
+	}
+
+/**
+ * @return The UID for this view
+ */
+TUid CNPRStoryListBoxView::Id() const
+	{
+	return TUid::Uid(ENPRStoryListBoxViewId);
+	}
+
+/**
+ * Handle a command for this view (override)
+ * @param aCommand command id to be handled
+ */
+void CNPRStoryListBoxView::HandleCommandL( TInt aCommand )
+	{
+	switch ( aCommand )
+		{	// code to dispatch to the AknView's menu and CBA commands is generated here
+		case ESelect:
+			{
+			iNPRStoryListBox->ShowSelectedStoryL();
+			break;
+			}
+		case EAknSoftkeyBack:
+			{
+			static_cast<CNPRAppUi*>(CEikonEnv::Static()->EikAppUi())->ActivateLocalViewL(TUid::Uid(ENPRListBoxViewId));
+			break;
+			}
+		default:
+			break;
+		}
+	}
+
+/**
+ *	Handles user actions during activation of the view, 
+ *	such as initializing the content.
+ */
+void CNPRStoryListBoxView::DoActivateL( 
+		const TVwsViewId& /*aPrevViewId*/,
+		TUid /*aCustomMessageId*/,
+		const TDesC8& /*aCustomMessage*/ )
+	{
+	SetupStatusPaneL();
+	if ( iNPRStoryListBox == NULL )
+		{
+		iNPRStoryListBox = CreateContainerL();
+		iNPRStoryListBox->SetMopParent( this );
+		AppUi()->AddToStackL( *this, iNPRStoryListBox );
+		} 
+	}
+
+/**
+ */
+void CNPRStoryListBoxView::DoDeactivate()
+	{
+	CleanupStatusPane();
+	
+	if ( iNPRStoryListBox != NULL )
+		{
+		AppUi()->RemoveFromViewStack( *this, iNPRStoryListBox );
+		delete iNPRStoryListBox;
+		iNPRStoryListBox = NULL;
+		}
+	}
+
+/** 
+ * Handle status pane size change for this view (override)
+ */
+void CNPRStoryListBoxView::HandleStatusPaneSizeChange()
+	{
+	CAknView::HandleStatusPaneSizeChange();
+	
+	// this may fail, but we're not able to propagate exceptions here
+	TVwsViewId view;
+	AppUi()->GetActiveViewId( view );
+	if ( view.iViewUid == Id() )
+		{
+		TInt result;
+		TRAP( result, SetupStatusPaneL() );
+		}
+	}
+
+void CNPRStoryListBoxView::SetupStatusPaneL()
+	{
+	// reset the context pane
+	TUid contextPaneUid = TUid::Uid( EEikStatusPaneUidContext );
+	CEikStatusPaneBase::TPaneCapabilities subPaneContext = 
+		StatusPane()->PaneCapabilities( contextPaneUid );
+	if ( subPaneContext.IsPresent() && subPaneContext.IsAppOwned() )
+		{
+		CAknContextPane* context = static_cast< CAknContextPane* > ( 
+			StatusPane()->ControlL( contextPaneUid ) );
+		context->SetPictureToDefaultL();
+		}
+	
+	// setup the title pane
+	TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
+	CEikStatusPaneBase::TPaneCapabilities subPaneTitle = 
+		StatusPane()->PaneCapabilities( titlePaneUid );
+	if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() )
+		{
+		CAknTitlePane* title = static_cast< CAknTitlePane* >( 
+			StatusPane()->ControlL( titlePaneUid ) );
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, R_NPRSTORY_LIST_BOX_TITLE_RESOURCE );
+		title->SetFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}			
+	}
+
+void CNPRStoryListBoxView::CleanupStatusPane()
+	{
+	}
+
+/**
+ *	Creates the top-level container for the view.  You may modify this method's
+ *	contents and the CNPRStoryListBox::NewL() signature as needed to initialize the
+ *	container, but the signature for this method is fixed.
+ *	@return new initialized instance of CNPRStoryListBox
+ */
+CNPRStoryListBox* CNPRStoryListBoxView::CreateContainerL()
+	{
+	return CNPRStoryListBox::NewL( ClientRect(), NULL, this );
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/NPRStoryXmlParser.cpp	Fri Jul 24 08:46:02 2009 +0100
@@ -0,0 +1,269 @@
+/*
+ ============================================================================
+ Name	: NPRStoryXmlParser.cpp
+ Author	: John Kern
+ 
+ Copyright (c) 2009 Symbian Foundation Ltd
+ This component and the accompanying materials are made available
+ under the terms of the License "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:
+ - Symbian Foundation Ltd - initial contribution
+ - Symsource
+ 
+ Contributors:
+ - John Kern
+ - Symsource
+ 
+ Description : Story xml parser
+ ============================================================================
+ */
+
+#include "NPRDocument.h"
+#include "NPRStoryXmlParser.h"
+#include "NPRStory.h"
+
+CNPRStoryXmlParser* CNPRStoryXmlParser::NewLC(RPointerArray<CNPRStory>* aStoryArray)
+	{
+	CNPRStoryXmlParser* self = new (ELeave) CNPRStoryXmlParser(aStoryArray);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CNPRStoryXmlParser* CNPRStoryXmlParser::NewL(RPointerArray<CNPRStory>* aStoryArray)
+	{
+	CNPRStoryXmlParser* self = CNPRStoryXmlParser::NewLC(aStoryArray);
+	CleanupStack::Pop(); // self;
+	return self;
+	}
+
+CNPRStoryXmlParser::CNPRStoryXmlParser(RPointerArray<CNPRStory>* aStoryArray)
+:iStoryArray(aStoryArray)
+	{
+	// No implementation required
+	}
+
+CNPRStoryXmlParser::~CNPRStoryXmlParser()
+	{
+	delete iTagName;
+	}
+
+
+void CNPRStoryXmlParser::ConstructL()
+	{
+	iState = ENPRNewsStateIdle;
+	}
+
+void CNPRStoryXmlParser::OnStartDocumentL(
+		const RDocumentParameters& /* aDocParam */, 
+		TInt aErrorCode )
+	{
+	User::LeaveIfError(aErrorCode);
+	}
+
+void CNPRStoryXmlParser::OnEndDocumentL(TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	}
+
+HBufC* CNPRStoryXmlParser::Copy8To16LC(const TDesC8& aDes)
+        {
+        HBufC* buf16 = HBufC::NewLC(aDes.Length());
+        buf16->Des().Copy(aDes);
+        return buf16;
+        }
+
+void CNPRStoryXmlParser::OnStartElementL(
+		const RTagInfo& aElement, 
+		const RAttributeArray& aAttributes, 
+		TInt  aErrorCode	)
+	{
+	User::LeaveIfError(aErrorCode);
+	const TDesC8& tagName = aElement.LocalName().DesC();
+	if (tagName.CompareF(_L8("story"))==0)
+		{
+		iStory = ETrue;
+		if(iTagName)
+			{
+			delete iTagName;
+			}
+		iState = ENPRNewsStateStory;
+		iCurrentStory = CNPRStory::NewL(); 
+		// find the story Id attribute
+		TInt count = aAttributes.Count();
+		for (TInt i = 0 ; i < count ; i++)
+			{
+			 const RAttribute& attribute = aAttributes[i];
+			 const RTagInfo& nameInfo = attribute.Attribute();
+
+			 const TDesC8& localName8 = nameInfo.LocalName().DesC();
+			 const TDesC8& value8 = attribute.Value().DesC();
+
+			 HBufC* localName16 = Copy8To16LC(localName8);
+			 HBufC* value16 = Copy8To16LC(value8);
+			 if (localName16->CompareF(_L("id")) == 0 )
+				 {
+				 TLex lex(value16->Des());
+				 TInt v = 0;
+				 lex.Val(v);
+				 iCurrentStory->SetStoryId( v );
+				 }
+			 CleanupStack::PopAndDestroy(2); // value16 and localName16
+			}
+		}
+	else if(iStory)
+		{
+		if(!iTagName && ((iState != ENPRNewsStateText) || (iState != ENPRNewsStateParagraph)))
+			{
+			iTagName = tagName.AllocL();
+			}
+		
+		if (iTagName->CompareF(_L8("title"))==0 && iState == ENPRNewsStateStory)
+			{
+			iState = ENPRNewsStateTitle;
+			}
+		else if (iTagName->CompareF(_L8("teaser"))==0 && iState == ENPRNewsStateStory)
+			{
+			iState = ENPRNewsStateTeaser;
+			}
+		else if (iTagName->CompareF(_L8("thumbnail"))==0 && iState == ENPRNewsStateStory)
+			{
+			iState = ENPRNewsStateThumbnail;
+			}
+		else if (iTagName->CompareF(_L8("text"))== 0 && iState == ENPRNewsStateStory)
+			{
+			iState = ENPRNewsStateText;
+			}	
+		else if (tagName.CompareF(_L8("paragraph"))== 0 && iTagName->CompareF(_L8("text"))==0)
+			{
+			iState = ENPRNewsStateParagraph;
+			}
+		else
+			{
+			iState = ENPRNewsStateIdle;
+			}
+		}
+	}
+
+void CNPRStoryXmlParser::OnEndElementL(const RTagInfo& aElement, TInt aErrorCode )
+	{
+	User::LeaveIfError(aErrorCode);
+	const TDesC8& tagName = aElement.LocalName().DesC();
+	
+	TBool result = EFalse;
+	
+	if (tagName.CompareF(_L8("story"))== 0 && iState == ENPRNewsStateStory)
+		{
+		iStory = EFalse;
+		iState = ENPRNewsStateIdle;
+		iStoryArray->AppendL(iCurrentStory);
+		iCurrentStory = NULL;
+		} 
+	else if(iTagName)
+		{//TO DO we can have a switch here
+		if (iTagName->CompareF(tagName)== 0 && iState == ENPRNewsStateTitle)
+			{ 
+			result = ETrue;
+			}
+		else if (iTagName->CompareF(tagName)== 0 && iState == ENPRNewsStateTeaser)
+			{
+			result = ETrue;
+			}	
+		else if (iTagName->CompareF(tagName)== 0 && iState == ENPRNewsStateThumbnail)
+			{
+			result = ETrue;
+			}	
+		else if (iTagName->CompareF(tagName)== 0 && iState == ENPRNewsStateText)
+			{
+			result = ETrue;
+			}	
+		else if (tagName.CompareF(_L8("paragraph"))== 0 && iTagName->CompareF(_L8("text"))==0)
+			{
+			iState = ENPRNewsStateText;
+			}	
+		else if (iTagName->CompareF(tagName)== 0 && iState == ENPRNewsStateIdle)
+			{
+			result = ETrue;
+			}
+		}
+	
+	if(result)
+		{
+		if(iTagName)
+			{
+			delete iTagName;
+			iTagName = NULL;
+			}
+		iState = ENPRNewsStateStory;
+		}
+	}
+
+void CNPRStoryXmlParser::OnContentL(const TDesC8&  aBytes, TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	
+	switch(iState)
+		{
+		case ENPRNewsStateTitle:
+			{
+			iCurrentStory->SetTitleL(aBytes);
+			break;
+			}
+		case ENPRNewsStateTeaser:
+			{
+			iCurrentStory->SetTeaserL(aBytes);
+			break; 
+			}
+		case ENPRNewsStateParagraph:
+			{
+			iCurrentStory->SetTextL(aBytes);
+			break;
+			}
+		default:
+			iState = iState; // for debugging. 
+			break;
+		}
+	}
+
+void CNPRStoryXmlParser::OnStartPrefixMappingL(
+		const RString& /* aPrefix */, 
+		const RString& /* aUri */, 
+		TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	}
+
+void CNPRStoryXmlParser::OnEndPrefixMappingL(const RString& /* aPrefix */, TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	}
+
+void CNPRStoryXmlParser::OnIgnorableWhiteSpaceL(const TDesC8& /* aBytes */, TInt /* aErrorCode*/)
+	{
+	}
+
+void CNPRStoryXmlParser::OnSkippedEntityL(const RString& /* aName */, TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	}
+
+void CNPRStoryXmlParser::OnProcessingInstructionL(
+		const TDesC8& /* aTarget */ , 
+		const TDesC8& /* aData */ , 
+		TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	}
+
+void CNPRStoryXmlParser::OnError(TInt aErrorCode)
+	{
+	User::LeaveIfError(aErrorCode);
+	}
+
+TAny* CNPRStoryXmlParser::GetExtendedInterface(const TInt32 /* aUid */) 
+	{
+	return NULL;
+	}
Binary file testData/pic1.jpg has changed
Binary file testData/pic2.jpg has changed
Binary file testData/pic3.jpg has changed
Binary file testData/pic4.jpg has changed
Binary file testData/pic5.jpg has changed
Binary file testData/pic6.jpg has changed