ImagePrint/ImagePrintUI/imageprinteng/src/crealfactory.cpp
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:  
*
*/


#include "crealfactory.h"
#include "cimageprintengine.h"
#include "cdiscoverymanager.h"
#include "cprintjobmanager.h"
#include "cprinteventcatcher.h"
#include "cidleprinteventcatcher.h"
#include "csettingsmanager.h"
#include "imageprint.h"
#include "cimageprint.h"
#include "clog.h"

const TInt KMaxServerConnections( 3 );

// CONSTRUCTION
CRealFactory* CRealFactory::NewL(
    CImagePrintEngine* aEngine )
    {
    CRealFactory* self = new ( ELeave ) CRealFactory( aEngine );
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }

// Default constructor
CRealFactory::CRealFactory( CImagePrintEngine* aEngine )
    : CIFFactory( aEngine )
    {
    }

// Destructor
CRealFactory::~CRealFactory()
    {
    LOG("CRealFactory::~CRealFactory BEGIN");
	if ( iEventCatcher )
		{
		iEventCatcher->UnRegisterObserver( iPrintJobMgr );
		}
    delete iPrintJobMgr;
    delete iDiscoveryMgr;
    delete iSettingsMgr;
    delete iEventCatcher;
    delete iIdleEventCatcher;

    if ( iImageServer )
    	{
	    iImageServer->Close();
	    delete iImageServer;
    	}

    iImagePrintClient.Close();
    LOG("CRealFactory::~CRealFactory END");
    }

// 2nd phase constructor
void CRealFactory::ConstructL()
    {
    iImageServer = new ( ELeave ) CImagePrint;
    iImageServer->ConnectL();

    iEventCatcher = CPrintEventCatcher::NewL( this, iPrintEngine );
    iIdleEventCatcher = CIdlePrintEventCatcher::NewL( this /*aIdleObserver*/ );
    iDiscoveryMgr = CDiscoveryManager::NewL( this );
    iPrintJobMgr = CPrintJobManager::NewL( this, iPrintEngine );
    iSettingsMgr = CSettingsManager::NewL( this );

    iEventCatcher->RegisterObserver( iPrintJobMgr );
    iImageServer->RegisterIdleObserver( iIdleEventCatcher );

    User::LeaveIfError( iImagePrintClient.ConnectL() );
    }

// Discovery interface
MDiscovery* CRealFactory::DiscoveryIF()
    {
    return iDiscoveryMgr;
    }

// Settings interface
MPrintSettings* CRealFactory::SettingsIF()
    {
    return iSettingsMgr;
    }

// Print job interface
MPrintJob* CRealFactory::PrintJobIF()
    {
    return iPrintJobMgr;
    }

// Returns event catcher
MPrintEventObserver* CRealFactory::PrintEventObserverIF()
    {
    return iEventCatcher;
    }

MPrintEventRegisterIF* CRealFactory::PrintEventRegisterIF()
    {
    return iEventCatcher;
    }

// Restarts Engine
void CRealFactory::RestartEngine()
    {
    // No implementation
    }

// Returns Engine
CImagePrint* CRealFactory::Engine()
    {
    return iImageServer;
    }

TBool CRealFactory::IsPrinting() const
    {
    return iPrintJobMgr->IsPrinting();
    }


MIdlePrintEventRegisterIF* CRealFactory::IdlePrintEventRegisterIF()
    {
    return iIdleEventCatcher;
    }

RImagePrintClient CRealFactory::ImagePrintClient()
    {
    return iImagePrintClient;
    }

TBool CRealFactory::IsApplicationAlreadyInUse()
    {
    TBool retValue = EFalse;
    TInt serverConnections = 0;
    TInt err = iImagePrintClient.CountConnections( serverConnections );
    if( err != KErrNone )
        {
        return EFalse;
        }
    
    // if server has already two connections
    if( serverConnections == KMaxServerConnections )
        {
        //if another connection IS NOT pictbridge
        TInt mode = iImagePrintClient.IsPictBridgeMode();
        if( mode < 0 )
            {
            retValue = EFalse;
            }
        }
    // too many connection
    if( serverConnections > KMaxServerConnections )
        {
        retValue = EFalse;
        }
    return retValue;
    }

//  End of File