ImagePrint/ImagePrintUI/imageprintapp/src/cpropertiesboxmodel.cpp
branchGCC_SURGE
changeset 25 59ea2209bb67
parent 23 08cc4cc059d4
parent 15 a92d00fca574
--- a/ImagePrint/ImagePrintUI/imageprintapp/src/cpropertiesboxmodel.cpp	Fri Jun 11 16:24:10 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,532 +0,0 @@
-/*
-* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  
-*
-*/
-
-
-#include <akntextsettingpage.h>
-#include <eiklbx.h>
-#include <StringLoader.h>
-#include <AknQueryValueText.h>
-#include <aknpopupsettingpage.h>
-#include <aknslidersettingpage.h> 
-#include <bautils.h>
-#include <pathinfo.h>
-#include <aknmessagequerydialog.h>
-#include <apgcli.h>                 // rapalssession
-#include <imageprintapp.rsg>
-#include <AknQueryDialog.h>
-#include <driveinfo.h>
-
-#include "imageprint.h"
-#include "cprintsettings.h"
-#include "cbasecapability.h"
-#include "cimageprintsettingscontainer.h"
-#include "cimageprintengine.h"
-#include "ciffactory.h"
-#include "mdiscoveryobserver.h"
-#include "mdiscovery.h"
-#include "clog.h"
-#include "clistcapability.h"
-#include "imageprintvariant.h"
-#include "cpropertiesboxmodel.h"
-
-const TInt KListItemsRequired( 2 );
-const TInt KDefaultPrinterIndex( 0 );
-const TInt KNumerOfCopiesIndex( 1 );
-
-// CONSTRUCTION
-CPropertiesBoxModel* CPropertiesBoxModel::NewL(
-    CImagePrintEngine& aEngine,
-    MPrintSettings* aSettings,
-    CImagePrintSettingsContainer* aContainer )
-    {
-    CPropertiesBoxModel* self =
-        CPropertiesBoxModel::NewLC( aEngine, aSettings, aContainer );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-CPropertiesBoxModel* CPropertiesBoxModel::NewLC(
-    CImagePrintEngine& aEngine,
-    MPrintSettings* aSettings,
-    CImagePrintSettingsContainer* aContainer )
-    {
-    CPropertiesBoxModel* self =
-        new ( ELeave ) CPropertiesBoxModel( aEngine, aSettings, aContainer );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    return self;
-    }
-
-// Constructor
-CPropertiesBoxModel::CPropertiesBoxModel(
-    CImagePrintEngine& aEngine,
-    MPrintSettings* aSettings,
-    CImagePrintSettingsContainer* aContainer ) :
-    iEngine( aEngine ),
-    iSettingsIF( aSettings ),
-    iContainer( aContainer )
-    {
-    }
-
-// Destructor
-CPropertiesBoxModel::~CPropertiesBoxModel()
-    {
-    delete iPrintSettings;
-    delete iDefaultPrinter;
-    delete iNumberOfCopiesText; 
-    delete iMMC;
-    delete iPictBridge;
-    }
-
-// 2nd phase constructor
-void CPropertiesBoxModel::ConstructL()
-    {
-    InitSettingsL();
-    iDefaultPrinter = StringLoader::LoadL( R_PRINT_SELECTED_PRINTER );
-    iNumberOfCopiesText = StringLoader::LoadL( R_QTN_PRINT_SETTINGS_NOC );
-    iMMC = StringLoader::LoadL( R_PRINT_MEMORY_CARD );
-    iPictBridge = StringLoader::LoadL( R_QTN_PRINT_SETTINGS_DEFAULT_USB );
-    iNumberOfCopiesValue = 1;
-    }
-
-void CPropertiesBoxModel::InitSettingsL()
-    {
-    delete iPrintSettings;
-    iPrintSettings = NULL;
-    iPrintSettings = iSettingsIF->PrinterSettingsL();
-    iCount = iPrintSettings->iCapabilities.Count();
-    TInt i( 0 );
-    TInt counter = iPrintSettings->iCapabilities.Count();
-    // If current protocol is MMC remove one item, because there is no layouts for mmc. 
-    if ( MDiscoveryObserver::EMMC == iSettingsIF->GetCurrentPrinterProtocol() )
-    	{
-    		iCount--;
-    	}
-      
-    for ( i = 0; i < counter; i++ )
-        {
-        if ( iPrintSettings->iCapabilities[i]->iTitle.CompareF( KNullDesC ) == 0 )
-            {
-            // Remove non-title capability items as those won't be displayed
-            iCount--;
-            }
-        }
-    
-    // Add always first two for default printer item and for Number of copies item
-    iCount = iCount + KListItemsRequired;
-    }
-
-// Returns the number of listbox items
-TInt CPropertiesBoxModel::MdcaCount() const
-    {
-    LOG1("CPropertiesBoxModel::MdcaCount: %d", iCount );
-    return iCount;
-    }
-
-// Creates the text string for the list box item and returns it
-TPtrC CPropertiesBoxModel::MdcaPoint( TInt aIndex ) const
-    {
-    LOG1("CPropertiesBoxModel::MdcaPoint START index: %d", aIndex );
-	
-	switch ( aIndex )
-		{
-		case KDefaultPrinterIndex:
-		    {
-		    SetDefaultPrinterItem();
-			break;
-		    }
-		case KNumerOfCopiesIndex:
-		    {
-			SetNumberOfCopiesItem();
-			break;
-		    }
-		default:
-            {
-            SetOtherCapability( aIndex );
-			break;
-            }    
-		}
-	
-	LOG1("CPropertiesBoxModel::MdcaPoint END, iBuf: %S", &iBuf );        
-    return iBuf;
-    }
-
-void CPropertiesBoxModel::SetDefaultPrinterItem() const
-    {
-    LOG("CPropertiesBoxModel::SetDefaultPrinterItem START");
-
-    iBuf.Copy( KTabChar );
-    iBuf.Append( *iDefaultPrinter );
-    iBuf.Append( KTabChar );
-    iBuf.Append( KTabChar );
-    if( iSettingsIF->GetDefaultPrinterProtocol() ==
-        MDiscoveryObserver::EMMC ) // mmc
-        {
-        iBuf.Append( *iMMC );
-        }
-    else if( iSettingsIF->GetDefaultPrinterProtocol() ==
-             MDiscoveryObserver::EUSB ) // pictbridge
-        {
-        iBuf.Append( *iPictBridge );
-        }
-    else
-        {
-        // No can do if this fails. Not leaving function.
-        TRAP_IGNORE(
-            HBufC* defaultPrinterName =
-                iSettingsIF->GetDefaultPrinterNameLC();
-            iBuf.Append( *defaultPrinterName );
-            CleanupStack::PopAndDestroy( defaultPrinterName );
-            );
-        }
-    
-    LOG("CPropertiesBoxModel::SetDefaultPrinterItem END");	
-    }
-
-void CPropertiesBoxModel::SetNumberOfCopiesItem() const
-    {
-    LOG("CPropertiesBoxModel::SetNumberOfCopiesItem START");	
-
-    iBuf.Copy( KTabChar );
-    iBuf.Append( *iNumberOfCopiesText );
-    iBuf.Append( KTabChar );
-    iBuf.Append( KTabChar );
-    iBuf.AppendNum( iNumberOfCopiesValue );
-
-    LOG("CPropertiesBoxModel::SetNumberOfCopiesItem END");	
-    }
-
-void CPropertiesBoxModel::SetOtherCapability( const TInt &aIndex ) const
-    {
-    LOG("CPropertiesBoxModel::SetOtherCapability START");	
-    
-    iBuf.Zero();
-    HBufC* buf = NULL;
-
-    // Get the text for the list box
-    TInt position = CapabilityArrayIndex( aIndex - KListItemsRequired );
-    TRAPD( err,
-       buf = iPrintSettings->iCapabilities[position]->ListBoxTextL() );
-	if ( !err && buf )
-        {
-        iBuf = buf->Des();
-        delete buf;
-        }
-
-    LOG("CPropertiesBoxModel::SetOtherCapability END");	
-    }
-
-// Handles the list box (enter) events by launching the pop-up list
-void CPropertiesBoxModel::HandleListBoxEventL(
-    CEikListBox* aListBox,
-    TListBoxEvent aEventType )
-    {
-    LOG("CPropertiesBoxModel::HandleListBoxEventL START");
-    //Change to EEventItemSingleClicked for Single click event
-    if ( (aEventType == EEventEnterKeyPressed || aEventType == EEventItemSingleClicked ) &&
-         aListBox->CurrentItemIndex() != KErrNotFound )
-        {
-        if( aListBox->CurrentItemIndex() == 0 )
-            {
-            // launch dialog query for selecting default printer this returns
-            // protocol id as defined in DiscoveryObserver.h or -1 if failed.
-            TInt protocol = LaunchDefaultPrinterListL();
-            if( protocol >= 0 )
-                {
-                iContainer->DoDiscoveryL( protocol );
-                InitSettingsL();
-                iContainer->UpdateListBox();
-                iContainer->DrawNow();
-                }
-            }
-        
-         if( aListBox->CurrentItemIndex() == 1 )
-            {
-            LaunchNumberOfCopiesDialogL();
-           	iContainer->UpdateListBox();
-            iContainer->DrawNow();
-            }
- 	
-         if ( aListBox->CurrentItemIndex() > 1 )
-            {
-            TInt selIndex = CapabilityArrayIndex( aListBox->CurrentItemIndex() - KListItemsRequired );
-            TBool valueChanged = iPrintSettings->iCapabilities[selIndex]->LaunchPopupListL();
-
-            if( valueChanged )
-                {
-                SaveCurrentSelectionL( *(iPrintSettings->iCapabilities[ selIndex ]), aListBox );
-                InitSettingsL();
-                iContainer->UpdateListBox();
-                iContainer->DrawNow();                    
-                }
-            }
-        }
-
-	LOG("CPropertiesBoxModel::HandleListBoxEventL END");        
-    }
-
-// Saves selection to engine
-void CPropertiesBoxModel::SaveCurrentSelectionL(
-                          CBaseCapability &aCapab,
-                          CEikListBox* aListBox )
-    {
-    LOG("CPropertiesBoxModel::SaveCurrentSelectionL START");    
-    
-    TInt initList = iSettingsIF->SetPrinterSettingL( aCapab );
-    if( initList == 0 )
-        {
-        CPrintSettings* tempSettings = iSettingsIF->PrinterSettingsL();
-        delete iPrintSettings;
-        iPrintSettings = tempSettings;
-
-        // Sets the active page to be the first one, if settings have truly
-        // changed
-        iSettingsIF->SetActivePageL( 1 );
-
-        aListBox->HandleItemRemovalL();
-        aListBox->HandleItemAdditionL();
-        }
-	
-	LOG("CPropertiesBoxModel::SaveCurrentSelectionL END");            
-    }
-
-// Returns capability array index based on the list box index
-TUint CPropertiesBoxModel::CapabilityArrayIndex(
-    TInt aListBoxIndex ) const
-    {
-	LOG("CPropertiesBoxModel::CapabilityArrayIndex START");    
-    
-    // Skip capabilities with empty title as they won't be placed to list box
-    TInt found( EFalse );
-    TInt i( 0 );
-    
-    while ( !found )
-        {
-        if ( iPrintSettings->iCapabilities[i]->
-             iTitle.CompareF( KNullDesC ) != 0  )
-            {
-            aListBoxIndex--;
-            }
-
-        if ( aListBoxIndex >= 0 )
-            {
-            i++;
-            }
-        else
-            {
-            found = ETrue;
-            }
-        }
-	
-	LOG("CPropertiesBoxModel::CapabilityArrayIndex END");    
-    return TUint( i );
-    }
-
-
-void CPropertiesBoxModel::LaunchNumberOfCopiesDialogL()
-    {
-	LOG("CPropertiesBoxModel::LaunchNumberOfCopiesDialogL START");       
-	CAknNumberQueryDialog* dlg = new( ELeave ) CAknNumberQueryDialog ( iNumberOfCopiesValue );
-	dlg->PrepareLC( R_NOC_QUERY);
-	dlg->RunLD();
-    
-    // After selecting copies, NaviText is updated.
-    iContainer->ChangeStatusPaneTextL( iNumberOfCopiesValue ); 
-	                                                           
-    // Set value for settings
-    SetNumberOfCopiesValueL();	
-	
-	LOG("CPropertiesBoxModel::LaunchNumberOfCopiesDialogL END");       
-    }
-
-
-void CPropertiesBoxModel::SetNumberOfCopiesValueL()
-    {
-    RArray<TInt> numberOfCopiesArray;
-    CleanupClosePushL( numberOfCopiesArray );
-    iSettingsIF->NumberOfCopies( numberOfCopiesArray );
-   
-    // Images selected in print job
-    TInt imagesCount = iEngine.FileArray().Count(); 
-    if(0 != imagesCount)
-        {
-        // Get number of copies for current image
-        if( numberOfCopiesArray.Count() != imagesCount )
-            {
-            numberOfCopiesArray.Reset();
-            for( TInt i=0; i < imagesCount; ++i )
-                {
-                numberOfCopiesArray.Append( 1 );
-                }
-            }
-    
-        TInt oldNOC( numberOfCopiesArray[ 0 ] );
-    
-        // if new value was entered
-        if (iNumberOfCopiesValue != oldNOC)
-            {
-            // Set Number of copies value for each image.
-            // Value is same for all images in IP 6.2
-            for ( TInt i=0; i<imagesCount; i++ )
-                {
-                numberOfCopiesArray[ i ] = iNumberOfCopiesValue;
-                }
-            
-            iSettingsIF->SetNumberOfCopiesL( numberOfCopiesArray );
-            }
-        }
-    CleanupStack::PopAndDestroy( &numberOfCopiesArray ); 
-    }
-
-TInt CPropertiesBoxModel::LaunchDefaultPrinterListL()
-    {
-    const TInt expectedNumberOfProtocols( 4 );
-    
-    // Array for list item descriptors.
-    CDesCArrayFlat* protocolNameArray = 
-        new( ELeave ) CDesCArrayFlat( expectedNumberOfProtocols );
-    CleanupStack::PushL( protocolNameArray );
-
-    // Map from list item index to protocol.
-    RArray<TInt> indexToProtocolMap( expectedNumberOfProtocols );
-    CleanupClosePushL( indexToProtocolMap );
-
-    // Get supported protocols from the engine
-    TInt supportedProtocols =
-        iEngine.InterfaceFactory().DiscoveryIF()->SupportedProtocols();
-
-    // Read list item descriptors, append them in array and update map.
-
-    // Bluetooth printer
-    if( supportedProtocols & KImagePrint_PrinterProtocol_BPP )
-        {
-        protocolNameArray->AppendL( CCoeEnv::Static()->AllocReadResourceLC(
-            R_QTN_PRINT_SETTINGS_DEFAULT_BT )->Des() );
-        indexToProtocolMap.AppendL( MDiscoveryObserver::EBPP );
-        CleanupStack::PopAndDestroy();	// protocolNameArray
-        }
-
-    // Memory card printer
-    if( supportedProtocols & KImagePrint_PrinterProtocol_DPOF )
-        {
-        RFs fs;
-    	CleanupClosePushL( fs ); 
-    	if( fs.Connect() == KErrNone )
-        	{
-			TInt driveId (-1);
-			TFileName path;
-			User::LeaveIfError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, driveId ) );
-			User::LeaveIfError( PathInfo::GetRootPath( path, driveId ) );
-
-    		if ( BaflUtils::PathExists( fs, path ))
-    			{
-		        protocolNameArray->AppendL( CCoeEnv::Static()->AllocReadResourceLC(
-	            R_QTN_PRINT_MEMORY_CARD )->Des() );
-		        indexToProtocolMap.AppendL( MDiscoveryObserver::EMMC );
-		        CleanupStack::PopAndDestroy();	// protocolNameArray
-    			}
-    		
-        	CleanupStack::PopAndDestroy( &fs );
-        	}
-        }
-
-    // USB printers
-    if( supportedProtocols & KImagePrint_PrinterProtocol_PictBridge )
-        {
-        protocolNameArray->AppendL( CCoeEnv::Static()->AllocReadResourceLC(
-            R_QTN_PRINT_SETTINGS_DEFAULT_USB )->Des() );
-        indexToProtocolMap.AppendL( MDiscoveryObserver::EUSB );
-        CleanupStack::PopAndDestroy();	// protocolNameArray
-        }
-
-    // WLAN printers 
-    if ( supportedProtocols & KImagePrint_PrinterProtocol_UPnP )
-        {
-        protocolNameArray->AppendL( CCoeEnv::Static()->AllocReadResourceLC(
-        R_QTN_PRINT_SETTINGS_DEFAULT_WLAN )->Des() );
-        indexToProtocolMap.AppendL( MDiscoveryObserver::EWLAN );
-        CleanupStack::PopAndDestroy();	// protocolNameArray
-        }
-    
-    // Prepare arrays for dialog
-    CAknQueryValueTextArray* queryTextArray = CAknQueryValueTextArray::NewL();
-    CleanupStack::PushL( queryTextArray );
-    queryTextArray->SetArray( *protocolNameArray );
-
-    CAknQueryValueText* queryValue = CAknQueryValueText::NewL();
-    CleanupStack::PushL( queryValue );
-    queryValue->SetArrayL( queryTextArray );
-
-    // Determine which is the default protocol using settings interface.
-    // Here defaultProtocol is protocol id as defined in MDiscoveryObserver.h.
-    TInt defaultProtocol = iSettingsIF->GetDefaultPrinterProtocol();
-
-    // Then do lookup in indexToProtocolMap to find correct index for this
-    // protocol id. Note that after this defaultProtocol is an index.
-    defaultProtocol = indexToProtocolMap.Find( defaultProtocol );
-    if ( defaultProtocol != KErrNotFound )
-    	{
-	    queryValue->SetCurrentValueIndex( defaultProtocol );
-    	}
-    else
-    	{
-   	    // Default protocol not available, get current protocol
-   	    // This is for example for the case where MMC is default,
-   	    // but removed from phone.
-   	    TInt currentProtocol = iSettingsIF->GetCurrentPrinterProtocol();
-	    currentProtocol = indexToProtocolMap.Find( currentProtocol );
-	    if ( currentProtocol != KErrNotFound )
-	    	{
-			queryValue->SetCurrentValueIndex( currentProtocol );
-	    	}
-    	}
-
-    CAknPopupSettingPage* page = new ( ELeave ) CAknPopupSettingPage(
-                iDefaultPrinter,
-                EAknSettingPageNoOrdinalDisplayed,
-                EAknCtPopupSettingList,
-                R_EMPTY_PROTOCOL_SETTING_LIST,
-                R_SETTING_GENERIC_PROTOCOL_PAGE,
-                *queryValue );
-    
-    CleanupStack::PushL( page );
-    page->ConstructL();
-    CleanupStack::Pop( page );
-
-    // Execute dialog and check that it returns properly. If so get the selected
-    // index and use it to protocol map to get name of the selected protocol.
-    TInt selectedProtocolId( -1 );
-    if( page->ExecuteLD() )
-        {
-        selectedProtocolId =
-            indexToProtocolMap[ queryValue->CurrentValueIndex() ];
-        }
-
-    // CleanupStack contains 4 items:
-    // protocolNameArray, indexToProtocolMap (close), queryTextArray and
-    // queryArray.
-    const TInt numberOfItemsInCleanupStack( 4 );
-    CleanupStack::PopAndDestroy( numberOfItemsInCleanupStack, protocolNameArray );
-    return selectedProtocolId;
-    }
-
-TInt CPropertiesBoxModel::NumberOfCopies()
-	{
-	return iNumberOfCopiesValue;
-	}
-
-//  End of File