diff -r 3f1fec088555 -r 613a5ff70823 DirectPrint/DirectPrintApp/ui/src/directprintsettingview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DirectPrint/DirectPrintApp/ui/src/directprintsettingview.cpp Wed Mar 31 00:04:55 2010 +0900 @@ -0,0 +1,669 @@ +/* +* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd. +* All rights reserved. +* 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: +* Kanrikogaku Kenkyusho, Ltd. - Initial contribution +* +* Contributors: +* +* Description: +* {Description of the file} +* +*/ + +// System include files +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// User include files +#include "clog.h" +#include "directprintapp.hrh" +#include "DirectPrintAppAppUi.h" +#include "DirectPrintEngine.h" +#include "DirectPrintModel.h" +#include "directprintsettingview.h" +#include "DirectPrintBearerMgr.h" + +#include "directprintbasecapability.h" +#include "directprintlistcapability.h" +#include "directprinttextcapability.h" +#include "directprintprintsettings.h" +#include "imageprint.h" +#include "directprintcapabilitycodes.h" + +CDirectPrintPrinterSettingView::CDirectPrintPrinterSettingView() + { + iListBox = NULL; + } + +CDirectPrintPrinterSettingView::~CDirectPrintPrinterSettingView() + { + AppUi()->RemoveFromViewStack(*this, iListBox); + delete iListBox; + } + +CDirectPrintPrinterSettingView* CDirectPrintPrinterSettingView::NewL() + { + CDirectPrintPrinterSettingView* self = CDirectPrintPrinterSettingView::NewLC(); + CleanupStack::Pop(self); + return self; + } + +CDirectPrintPrinterSettingView* CDirectPrintPrinterSettingView::NewLC() + { + CDirectPrintPrinterSettingView* self = new(ELeave) CDirectPrintPrinterSettingView(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +void CDirectPrintPrinterSettingView::ConstructL() + { + LOG("CDirectPrintPrinterSettingView::ConstructL BEGIN"); + BaseConstructL(R_DIRECTPRINT_PRINTERSETTING_VIEW); + + iViewId = TUid::Uid(EDirectPrintPrinterSettingViewId); + LOG("CDirectPrintPrinterSettingView::ConstructL END"); + } + +void CDirectPrintPrinterSettingView::HandleCommandL(TInt aCommand) + { + switch (aCommand) + { + case EAknSoftkeyBack: + { + iListBox->StoreSettingsL(); + StoreDriverInfoL(); + StoreTypeInfoL(); + StoreBearerInfoL(); + StoreExtendSettingsL(); + WriteDataL(); // write to model + GetBearerMgr()->SetJobSettings(); // write to bearer + GetModel().SetIsNewData(EFalse); + + AppUi()->HandleCommandL(EDirectPrintCmdIdPrinterSettingViewBack); + } + break; + default: + { + AppUi()->HandleCommandL(aCommand); + } + break; + } + } + +void CDirectPrintPrinterSettingView::HandleEditItemL(TInt aIndex, TBool aChanged) + { + if (aChanged) + { + TBuf<25> titleBearer; + CEikonEnv::Static()->ReadResource(titleBearer, R_DIRECTPRINT_PRINTERSETTING_ITEM_BEARER); + + TPtrC name = (*(iListBox->SettingItemArray()))[aIndex]->SettingName(); + if (name.Compare(titleBearer) == 0) + { + ReloadListL(); + } + } + } + +void CDirectPrintPrinterSettingView::DoActivateL(const TVwsViewId& /*aPrevViewId*/, TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/) + { + LOG("CDirectPrintPrinterSettingView::DoActivateL BEGIN"); + + if (GetModel().IsNewData()) + { + NewDataL(); + } + else + { + ReadDataL(); + } + + if (!iListBox) + { + // Create list box + iListBox = CDirectPrintSettingListBox::NewL(ClientRect()); + iListBox->SetMopParent(this); + iListBox->SetSettingListObserver(this); + iListBox->ConstructFromResourceL(R_DIRECTPRINT_PRINTERSETTING_ITEM_LIST); + iListBox->ActivateL(); + } + else + { + iListBox->SettingItemArray()->ResetAndDestroy(); + } + + LoadListL(); + LoadDriverInfoL(); + LoadTypeInfoL(); + LoadBearerInfoL(); + LoadExtendListL(); + iListBox->LoadSettingsL(); + AppUi()->AddToStackL(*this, iListBox); + iListBox->MakeVisible(ETrue); + iListBox->DrawNow(); + + // set the title pane + SetActiveTitleL(R_DIRECTPRINT_PRINTERSETTING_TITLE); + LOG("CDirectPrintPrinterSettingView::DoActivateL END"); + } + +void CDirectPrintPrinterSettingView::DoDeactivate() + { + LOG("CDirectPrintPrinterSettingView::DoDeactivate BEGIN"); + iListBox->MakeVisible(EFalse); + AppUi()->RemoveFromViewStack(*this, iListBox); + LOG("CDirectPrintPrinterSettingView::DoDeactivate END"); + } + +void CDirectPrintPrinterSettingView::LoadListL() + { + LOG("CDirectPrintPrinterSettingView::LoadListL BEGIN"); + + TBuf<25> itemTitle; + + // Common setting item + CAknTextSettingItem* item1 = new (ELeave) CAknTextSettingItem(ESettingViewItemPrinterName, iPrinterName); + CleanupStack::PushL(item1); + item1->SetEmptyItemTextL( _L("None") ); + CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_PRINTERNAME); + item1->ConstructL(EFalse, ESettingViewItemPrinterName, itemTitle, NULL, R_DIRECTPRINT_PRINTERSETTING_TEXT_SETTING_PAGE, -1); + iListBox->SettingItemArray()->AppendL(item1); + CleanupStack::Pop(item1); + + LOG("CDirectPrintPrinterSettingView::LoadListL 1"); + + iDriver = 0; + CAknEnumeratedTextPopupSettingItem* item2 = new (ELeave) CAknEnumeratedTextPopupSettingItem(ESettingViewItemDriver, iDriver); + CleanupStack::PushL(item2); + CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_DRIVER); + item2->ConstructL(EFalse, ESettingViewItemDriver, itemTitle, NULL, R_DIRECTPRINT_PRINTERSETTING_POPUP_SETTING_PAGE, -1, 0, R_DIRECTPRINT_PRINTERSETTING_POPUP_SETTING_TEXTS); + + LOG("CDirectPrintPrinterSettingView::LoadListL 2"); + // set printer driver + { + const TInt KSettingItemArrayGranularity = 5; + // Construct the array + CArrayPtr* enumeratedTextArray; + enumeratedTextArray = new( ELeave ) CArrayPtrFlat( KSettingItemArrayGranularity ); + CleanupStack::PushL( enumeratedTextArray ); + + // Construct a dummy array for popup text, needed to avoid a panic + CArrayPtr* popupTextArray; + popupTextArray = new( ELeave ) CArrayPtrFlat( KSettingItemArrayGranularity ); + CleanupStack::PushL( popupTextArray ); + + CDirectPrintAppAppUi* appui = static_cast( AppUi() ); + CDirectPrintEngine* engine = appui->Engine(); + + // Read in the texts to be used in the setting item list + TInt index; + // Loop through all the texts + + LOG1("ModelCount=[%d]", engine->ModelCount()); + + for (index=0; index < engine->ModelCount(); index++) + { + HBufC* thisText = HBufC::NewLC(KMaxPrinterModelNameLength); + TPtr thisTextDes = thisText->Des(); + engine->ModelName(index, thisTextDes); + CAknEnumeratedText* enumeratedText = new( ELeave ) CAknEnumeratedText( index, thisText ); + CleanupStack::Pop( thisText ); + CleanupStack::PushL( enumeratedText ); + enumeratedTextArray->AppendL( enumeratedText ); + CleanupStack::Pop( enumeratedText ); + } + if (engine->ModelCount() > 0) + { + item2->SetEnumeratedTextArrays( enumeratedTextArray, popupTextArray ); + } + CleanupStack::Pop( popupTextArray ); + CleanupStack::Pop( enumeratedTextArray ); + } + LOG("CDirectPrintPrinterSettingView::LoadListL 2-2"); + + iListBox->SettingItemArray()->AppendL(item2); + CleanupStack::Pop(item2); + + LOG("CDirectPrintPrinterSettingView::LoadListL 3"); + iType = 0; + CAknEnumeratedTextPopupSettingItem* item3 = new (ELeave) CAknEnumeratedTextPopupSettingItem(ESettingViewItemType, iType); + CleanupStack::PushL(item3); + CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_TYPE); + item3->ConstructL(EFalse, ESettingViewItemType, itemTitle, NULL, R_DIRECTPRINT_PRINTERSETTING_POPUP_SETTING_PAGE, -1, 0, R_DIRECTPRINT_PRINTERSETTING_TYPE_POPUP_SETTING_TEXTS); + iListBox->SettingItemArray()->AppendL(item3); + CleanupStack::Pop(item3); + + iBearer = 0; + LOG("CDirectPrintPrinterSettingView::LoadListL 4"); + CAknEnumeratedTextPopupSettingItem* item4 = new (ELeave) CAknEnumeratedTextPopupSettingItem(ESettingViewItemBearer, iBearer); + CleanupStack::PushL(item4); + CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_BEARER); + item4->ConstructL(EFalse, ESettingViewItemBearer, itemTitle, NULL, R_DIRECTPRINT_PRINTERSETTING_POPUP_SETTING_PAGE, -1, 0, R_DIRECTPRINT_PRINTERSETTING_BEARER_POPUP_SETTING_TEXTS); + + SetBearerListL(item4); + + iListBox->SettingItemArray()->AppendL(item4); + CleanupStack::Pop(item4); + + LOG("CDirectPrintPrinterSettingView::LoadListL xxx"); + + iListBox->ListBox()->SetCurrentItemIndex(0); + LOG("CDirectPrintPrinterSettingView::LoadListL xx"); + iListBox->HandleChangeInItemArrayOrVisibilityL(); + LOG("CDirectPrintPrinterSettingView::LoadListL END"); + } + +void CDirectPrintPrinterSettingView::LoadExtendListL() + { + // Initialize capabilities for bearer + GetBearerMgr()->InitCapabilitiesL(iBearer); + + // Extend setting item + CDirectPrintPrintSettings* printSettings = GetBearerMgr()->PrinterSettingsL(); + TInt count = printSettings->iCapabilities.Count(); + for (TInt i=0; iiCapabilities[i]->SettingItemLC(ESettingViewItemExtent+i); + iListBox->SettingItemArray()->AppendL(item); + CleanupStack::Pop(item); + } + + LoadExtendSettingsL(); + + iListBox->HandleChangeInItemArrayOrVisibilityL(); + } + +void CDirectPrintPrinterSettingView::ReloadListL() + { + iListBox->StoreSettingsL(); + StoreDriverInfoL(); + StoreTypeInfoL(); + StoreBearerInfoL(); + StoreExtendSettingsL(); + + iListBox->SettingItemArray()->ResetAndDestroy(); + LoadListL(); + LoadDriverInfoL(); + LoadTypeInfoL(); + LoadBearerInfoL(); + + LoadExtendListL(); + + iListBox->LoadSettingsL(); + iListBox->DrawNow(); + } + +void CDirectPrintPrinterSettingView::SetBearerListL(CAknEnumeratedTextPopupSettingItem* item) + { + TInt err = GetBearerMgr()->GetProtocolNames(iBearerList); + if (!err) + { + CArrayPtr* textArray = item->EnumeratedTextArray(); + textArray->ResetAndDestroy(); + + TInt count = iBearerList.Count(); + for (TInt i=0; iAppendL(enumText); + CleanupStack::Pop(); + } + } + } + +void CDirectPrintPrinterSettingView::ReadDataL() + { + LOG("CDirectPrintPrinterSettingView::ReadDataL BEGIN"); + CDirectPrintModel& model = GetModel(); + TDirectPrintPrinterData printerData; + TInt index = model.SelectPrinter(); + if (index >= 0) + { + model.GetPrinterDataL(index, printerData); + } + else + { + model.SetCurrentPrinter(0); + } + + TDirectPrintBearerData bearerData; + index = model.CurrentBearer(); + if (index >= 0) + { + //model.GetBearerDataL(index, bearerData); + model.GetSelectedBearerDataL(bearerData); + } + else + { + model.SetCurrentBearer(0); + } + + iPrinterId = printerData.iPrinterId; + iPrinterName.Copy(printerData.iPrinterName); + iDriverName.Copy(printerData.iDriverName); + iTypeName.Copy(printerData.iTypeName); + //iDriver = 1; + //iBearer = 1; + //iAccessPoint = 0; + iAccessPointName.Copy(bearerData.iAccessPoint); + iBearerName.Copy(bearerData.iBearerName); + iPort = bearerData.iPort; + if (bearerData.iHostName.Length() > 0) + { + iHost.Copy(bearerData.iHostName); + } + iUserName.Copy(bearerData.iUserName); + iQue.Copy(bearerData.iQueName); + + LOG("CDirectPrintPrinterSettingView::ReadDataL END"); + } + +void CDirectPrintPrinterSettingView::WriteDataL() + { + LOG("CDirectPrintPrinterSettingView::WriteDataL BEGIN"); + TDirectPrintPrinterData printerData; + printerData.iPrinterId = iPrinterId; + printerData.iPrinterName.Copy(iPrinterName); +// printerData.iPrinterDriver = iDriverUid; + printerData.iDriverName.Copy(iDriverName); +// printerData.iPrinterType = iType; + printerData.iTypeName.Copy(iTypeName); + + TDirectPrintBearerData bearerData; + bearerData.iPrinterId = iPrinterId; + bearerData.iBearerName.Copy(iBearerName); + bearerData.iAccessPoint.Copy(iAccessPointName); + bearerData.iHostName.Copy(iHost); + bearerData.iPort = iPort; + bearerData.iUserName.Copy(iUserName); + bearerData.iQueName.Copy(iQue); + + CDirectPrintModel& model = GetModel(); + if (model.IsNewData()) + { + if (model.PrinterCount() == 0) + { + model.SetCurrentPrinter(0); + model.SetCurrentBearer(0); + } + model.SetPrinterDataL(model.PrinterCount(), printerData); + model.SetBearerDataL(model.BearerCount(), bearerData); + } + else + { + model.SetPrinterDataL(model.SelectPrinter(), printerData); + //model.SetBearerDataL(model.CurrentBearer(), bearerData); + model.SetBearerDataL(bearerData); + } + LOG("CDirectPrintPrinterSettingView::WriteDataL END"); + } + +void CDirectPrintPrinterSettingView::NewDataL() + { + CDirectPrintModel& model = GetModel(); + TInt count = model.PrinterCount(); + + TBuf<50> buf; + TBool IsNewName = EFalse; + for (TInt i=1; !IsNewName; i++) + { + buf.Format(_L("Printer%d"), count+i); + IsNewName = ETrue; + + for (TInt j=0; j itemTitle; + CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_DRIVER); + CAknEnumeratedTextPopupSettingItem* item = static_cast(GetSettingItemL(itemTitle)); + CArrayPtr* textArray = item->EnumeratedTextArray(); + TInt count = textArray->Count(); + + for (TInt i=0; iValue()->Des()) == 0) + { + iDriver = i; + } + } + } + +void CDirectPrintPrinterSettingView::LoadTypeInfoL() + { + TBuf<25> itemTitle; + CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_TYPE); + CAknEnumeratedTextPopupSettingItem* item = static_cast(GetSettingItemL(itemTitle)); + CArrayPtr* textArray = item->EnumeratedTextArray(); + TInt count = textArray->Count(); + + for (TInt i=0; iValue()->Des()) == 0) + { + iType = i; + } + } + } + +void CDirectPrintPrinterSettingView::LoadBearerInfoL() + { + TBuf<25> itemTitle; + CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_BEARER); + CAknEnumeratedTextPopupSettingItem* item = static_cast(GetSettingItemL(itemTitle)); + CArrayPtr* textArray = item->EnumeratedTextArray(); + TInt count = textArray->Count(); + + for (TInt i=0; iValue()->Des()) == 0) + { + iBearer = i; + } + } + } + +void CDirectPrintPrinterSettingView::LoadItemInfoL(TInt aResouceId, const TDesC& aInfo, TInt& aIndex) + { + TBuf<25> itemTitle; + CEikonEnv::Static()->ReadResource(itemTitle, aResouceId); + CAknEnumeratedTextPopupSettingItem* item = static_cast(GetSettingItemL(itemTitle)); + CArrayPtr* textArray = item->EnumeratedTextArray(); + TInt count = textArray->Count(); + + for (TInt i=0; iValue()->Des()) == 0) + { + aIndex = i; + } + } + } + +void CDirectPrintPrinterSettingView::LoadExtendSettingsL() + { + CDirectPrintPrintSettings* printSettings = GetBearerMgr()->PrinterSettingsL(); + TInt count = printSettings->iCapabilities.Count(); + for (TInt i=0; iiCapabilities[i]->iUid) + { + case EDirectPrintCapabAP: + { + CAknEnumeratedTextPopupSettingItem* item = static_cast(GetSettingItemL(printSettings->iCapabilities[i]->iTitle)); + CArrayPtr* textArray = item->EnumeratedTextArray(); + TInt count = textArray->Count(); + + for (TInt j=0; jValue()->Des()) == 0) + { + CDirectPrintListCapability* capability = static_cast(printSettings->iCapabilities[i]); + capability->iEnumIndex = j; + capability->iValue = capability->iEnumIDs[j]; + break; + } + } + } + break; + case EDirectPrintCapabHost: + { + CDirectPrintTextCapability* capability = static_cast(printSettings->iCapabilities[i]); + capability->iText.Copy(iHost); + } + break; + case EDirectPrintCapabPort: + { + printSettings->iCapabilities[i]->iValue = iPort; + } + break; + case EDirectPrintCapabUser: + { + CDirectPrintTextCapability* capability = static_cast(printSettings->iCapabilities[i]); + capability->iText.Copy(iUserName); + } + break; + case EDirectPrintCapabQue: + { + CDirectPrintTextCapability* capability = static_cast(printSettings->iCapabilities[i]); + capability->iText.Copy(iQue); + } + break; + default: + break; + } + } + } + +void CDirectPrintPrinterSettingView::StoreDriverInfoL() + { + TBuf<25> itemTitle; + CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_DRIVER); + iDriverName.Copy(GetSettingItemL(itemTitle)->SettingTextL()); + } + +void CDirectPrintPrinterSettingView::StoreTypeInfoL() + { + TBuf<25> itemTitle; + CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_TYPE); + iTypeName.Copy(GetSettingItemL(itemTitle)->SettingTextL()); + } + +void CDirectPrintPrinterSettingView::StoreBearerInfoL() + { + TBuf<25> itemTitle; + CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_BEARER); + iBearerName.Copy(GetSettingItemL(itemTitle)->SettingTextL()); + } + +void CDirectPrintPrinterSettingView::StoreItemInfoL(TInt aResouceId, TDes& aInfo) + { + TBuf<25> itemTitle; + CEikonEnv::Static()->ReadResource(itemTitle, aResouceId); + aInfo.Copy(GetSettingItemL(itemTitle)->SettingTextL()); + } + +void CDirectPrintPrinterSettingView::StoreExtendSettingsL() + { + CDirectPrintPrintSettings* printSettings = GetBearerMgr()->PrinterSettingsL(); + TInt count = printSettings->iCapabilities.Count(); + for (TInt i=0; iiCapabilities[i]->iUid) + { + case EDirectPrintCapabAP: + { + CDirectPrintListCapability* capability = static_cast(printSettings->iCapabilities[i]); + iAccessPointName.Copy(GetSettingItemL(capability->iTitle)->SettingTextL()); + capability->iValue = capability->iEnumIDs[capability->iEnumIndex]; + } + break; + case EDirectPrintCapabHost: + { + iHost.Copy(GetSettingItemL(printSettings->iCapabilities[i]->iTitle)->SettingTextL()); + } + break; + case EDirectPrintCapabPort: + { + iPort = printSettings->iCapabilities[i]->iValue; + } + break; + case EDirectPrintCapabUser: + { + iUserName.Copy(GetSettingItemL(printSettings->iCapabilities[i]->iTitle)->SettingTextL()); + } + break; + case EDirectPrintCapabQue: + { + iQue.Copy(GetSettingItemL(printSettings->iCapabilities[i]->iTitle)->SettingTextL()); + } + break; + default: + break; + } + } + } + +CAknSettingItem* CDirectPrintPrinterSettingView::GetSettingItemL(const TDesC& aItemTitle) + { + CAknSettingItem* item = NULL; + CAknSettingItemArray* array = iListBox->SettingItemArray(); + TInt count = array->Count(); + + for (TInt i=0; iSettingName(); + if (name.Compare(aItemTitle) == 0) + { + break; + } + item = NULL; + } + + return item; + } + +CDirectPrintBearerMgr* CDirectPrintPrinterSettingView::GetBearerMgr() + { + return (static_cast(AppUi()))->BearerMgr(); + } +