ImagePrint/ImagePrintUI/imgpprintdll/inc/cdiscoverydlgmanager.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:45:53 +0200
changeset 0 d11fb78c4374
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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:  
*
*/


#ifndef CDISCOVERYDLGMANAGER_H
#define CDISCOVERYDLGMANAGER_H

#include <e32std.h>
#include <aknPopup.h>
#include <aknlists.h>
#include <f32file.h>
#include <AknProgressDialog.h>

#include "mdiscoveryobserver.h"
#include "mdiscovery.h"

class CAknWaitDialog;
class CImagePrintAppUi;
class MPrintSettings;
class CIFFactory;

// CONSTANTS
const TInt KMaxPrinterNameLength( 84 );

//  CLASS DEFINITION
/**
 *
 * CDiscoveryDlgManager is a class that is responsible of displaying the pop-up
 * list at the beginning containing the available medias/devices to print to.
 *
 */
class CDiscoveryDlgManager
    : public CBase,
      public MDiscoveryObserver,
	  public MProgressDialogCallback
    {
    public:     // Constructors and destructors

        /**
         *  Two-phase constructor
         *
         *  @param aDiscovery   Discovery IF
         *
         *  @return Initialized instance of the class
         */
		static CDiscoveryDlgManager* NewL( CIFFactory& aIFFactory );
		static CDiscoveryDlgManager* NewLC( CIFFactory& aIFFactory);

        /**
         *  Destructor
         */
        virtual ~CDiscoveryDlgManager();

	protected:  // Constructors and destructors

		/**
		 *  Default constructor
         *  @param aDiscovery   Discovery IF
		 */
		CDiscoveryDlgManager();

        /**
         *  2nd phase constructor
         */
		void ConstructL( CIFFactory& aIFFactory );

	public:		// Methods derived from MDiscoveryObserver

		void NotifyNewPrintDeviceL( HBufC* aText, TInt aUid, TBool aCached,
                                   TPrinterType aType, TUint aVendor );
		void DiscoveryError( TInt aErrCode );
		void DeviceDiscoveryCompleted();
        void RemoveCachedPrinterL( TInt aUid ) ;

	public: // from MProgressDialogCallback

		void DialogDismissedL( TInt aButtonId );	
	
	public: // New methods

		/**
		 *  Starts the dialog manager, displays pop-up window where
         *  the found printers are placed
         *
         *  @param aProtocol Specific protocol to searh for. ( all
         *                   available as default )
         *
         *  @param aHidden True will not launch popup list. This will also
         *                 select the found printer to be the printer in use.
         *                 ( EFalse as default ). Note that this can only be used
         *                 with specific protocol and with BT first found printer
         *                 will be selected.
         *
         *
         *  @return ETrue = printer has been selected succesfully
         *          EFalse = not
		 */
		TBool StartDlgManagerL( TInt aProtocol = 0, TBool aHidden = EFalse);

		TInt PrinterUid() const;
        /**
         *  Returns the chosen printer's name
         */
        const TDesC& PrinterName() const;
		/*
		* Was the selected printer USB printer
		*/
		TBool USBPrinterSelected() const;
		
		/*
		*  Canceling discovery and close device popuplist.
		*/
		void CancelDiscovery();

	private:    // New methods

        /**
         *  Creates the pop-up list around the instance's list box
         *
         *  @return Initialized instance of the pop-up list
         */
		CAknPopupList* CreatePopupListL();

        /**
         *  Adds new device to list, updates popup list
         *
         *  @param aText    Textual description of the new print device
		 *  @param aUid     Uid that is associated with the print device
         *  @param aCached  Is printer cached or not?
         *  @param aType    Printer type
         *  @param aVendor	Printer brand
         */
        void AddNewDeviceToListL( HBufC* aText, TInt aUid, TBool aCached,
                                  TPrinterType aType, TUint aVendor );

        /**
         *  Show "restart discovery" query and start the discovery again
         *  if it is so desired
         */
        void RestartDiscoveryL();

        /**
         *  Removes cached icons from the list
         */
        void RemoveCachedIconsL();

        /**
         *  Adds "search again" text to pop-up list
         */
        void AddSearchAgainTextL();

		/**
		* Pop up a wait note during cancellation operation
		*/
		void ShowCancelWaitNoteL();

        TBool StartNormalDiscoveryL();

        TBool StartHiddenDiscoveryL();
        
        /*
		* @function 	AccessPointExistsL
		* @description	Checks if access point is defined
		* @return 		TBool
		*/
		TBool WlanAccessPointExistsL();
		
		/*
		* @function 	TryWlanDiscoveryL
		* @description	Try WLAN discovery 
		*               Checks if AP is defined
		                if not, launches WLAN wizard
		* @return 		TBool
		*/
		TBool TryDeviceDiscoveryL( TUint aProtocols, TBool aSingleDiscovery );

	private:    // Data

		// Listbox for popup list
		CAknSingleGraphicPopupMenuStyleListBox* iListBox;

		// The popup list
		CAknPopupList* iPopupList;

		// Array for profile names
		CDesCArrayFlat* iListOfDeviceNames;

        // Pointer to engine discovery interface
		MDiscovery* iDiscovery;

		// True if popup window is active
		TBool iActivePopup;

        // Array of printer UIDs
		CArrayFixFlat<TInt>* iUidArray;

        // Array of printer Protocols
		CArrayFixFlat<TPrinterType>* iProtocolArray;

        // Array of printer brands
		CArrayFixFlat<TUint>* iBrandArray;

        // Selected printer's name
        HBufC* iPrinterName;

        // Supported protocols
        TUint iSupportedProtocols;

		// Cancellation wait dialog
		CAknWaitDialog* iCancellingDialog;

		// Cancelling state
		TBool iCancelling;

		// Discovery status
		TBool iDiscoveryCompleted;

        // USB printer id
        TInt iUsbPrinterID;

		TBool iUSBPrinterSelected;

        // Hidden discovery flag
        TBool iHiddenDiscovery;

        // Printer found flag
        TBool iPrinterFound;

        // Searching cancelled flag
        TBool iSearchingCancelled;

		// Wait dialog shown while doing hidden discovery
		CAknWaitDialog* iHiddenDiscoveryDialog;

		// Array to store printer names
		CDesCArray* iNameArray;

		// Indicates whether discovery searches multiple devices (bt/wlan cases) or not
		TBool iMultiDiscovery;

		TInt iCurrentPrinterUid;

		// Interface for settings
        MPrintSettings* iSettings;

        //Contais "Searching" title text for popup dialog
   	    HBufC* iSearchingText;

        //Contais "Select device" title text for popup dialog
        HBufC* iSelectDeviceText;

        //Pointer to active title text
        TPtrC iActiveTitleText;
        
    };

#endif  // CDISCOVERYDLGMANAGER_H

//  End of File