⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 settinglistbox.cpp

📁 Simple Jabber Client for Symbian Platform
💻 CPP
字号:
/*
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *
 *  Jabber
 *  Copyright (C) 2004 Xie Tian Lu  http://sabber.jabberstudio.org/
 */


#include <commdb.h>
#include <cdbpreftable.h>

//#include <apdatahandler.h> 
//#include <apaccesspointitem.h>
 
#include "SettingListbox.h"
#include "SettingData.h"
#include "Sabber.hrh"
#include "osdlg.h"
#include "string.h"
#include "fileio.h"

CIAPSettingItem::CIAPSettingItem(  TInt aResourceId, TInt& aValue, TUint32 aExVal )
: CAknEnumeratedTextPopupSettingItem( aResourceId, aValue ), iIapId( aExVal )
{
	/*
	CApAccessPointItem* apItem = CApAccessPointItem::NewLC();

	//OUTGOING_GPRS
	User::LeaveIfError(apItem->WriteLongTextL(EApGprsAccessPointName, KSettingAPN));
	...
	//IAP
	apItem->SetNamesL(KIAPName);
	apItem->SetBearerTypeL(EApBearerTypeGPRS);

	iCommDb = CCommsDatabase::NewL(EDatabaseTypeIAP); 

	TUint32 iap;

	CApDataHandler* ApDataHandler = CApDataHandler::NewLC((CCommsDatabase&)(*iCommDb));

	User::LeaveIfError(iap = ApDataHandler->CreateFromDataL((CApAccessPointItem&) (*apItem)));

	CleanupStack::Pop(); //ApDataHandler
	CleanupStack::Pop(); //apItem

	delete ApDataHandler;
	ApDataHandler = NULL;
	delete apItem;
	apItem = NULL;
	*/
}

CIAPSettingItem::~CIAPSettingItem()
{
}

void CIAPSettingItem::SetIapId( TUint32 iapid )
{
	iIapId = iapid;
}



void CIAPSettingItem::SelectItemByIapId()
{
	TInt		err, value = 0;
	TUint32		iapid;
	
	CCommsDatabase* db = CCommsDatabase::NewL(EDatabaseTypeIAP);
	CleanupStack::PushL( db );
	
	CCommsDbTableView* view = db->OpenTableLC(TPtrC(IAP));
	err = view->GotoFirstRecord();
	TInt enumValue = 1;
	while ( err == KErrNone ) {
		view->ReadUintL( (TPtrC) COMMDB_ID, iapid );
		if ( iapid == iIapId )
			value = enumValue;
		enumValue++;
		err = view->GotoNextRecord();
	}

	CleanupStack::PopAndDestroy( 2 ); 
	SetSelectedIndex( value );
}


void CIAPSettingItem::LoadL()
{
	NewIap();
	CAknEnumeratedTextPopupSettingItem::LoadL();
	iEnumText  = EnumeratedTextArray();
	iPopupText = PoppedUpTextArray();

	CAknEnumeratedText*		aEnumText;
	TInt		err, value = 0;
	TUint32		iapid;
	
	CCommsDatabase* db = CCommsDatabase::NewL(EDatabaseTypeIAP);
	CleanupStack::PushL( db );

	CCommsDbTableView* view = db->OpenTableLC(TPtrC(IAP));
	err = view->GotoFirstRecord();
	TInt enumValue = 1;
	while ( err == KErrNone ) {
		TBuf< 64 >	buf;
		view->ReadTextL( TPtrC(COMMDB_NAME), buf );
		view->ReadUintL( (TPtrC) COMMDB_ID, iapid );
		
		if ( iapid == iIapId )
			value = enumValue;

		TInt	size = buf.Length();
		HBufC*	text = HBufC::New( size );
		text->operator=( buf );
		aEnumText = new CAknEnumeratedText( enumValue++, text );
		iEnumText->AppendL( aEnumText );
		err = view->GotoNextRecord();
	}
	CleanupStack::PopAndDestroy( 2 ); 
	SetSelectedIndex( value );
}


void CIAPSettingItem::NewIap()
{
	/*
	CCommsDatabase* db = CCommsDatabase::NewL(EDatabaseTypeIAP);
	CleanupStack::PushL( db );	
	
	TBuf<64>	name;
	TUint32		iapid;
	char		str[64];
	TBool		hasMMIM=EFalse;
	TInt err;
	CCommsDbTableView* view = db->OpenTableLC(TPtrC(IAP));
	err = view->GotoFirstRecord();
	while ( err == KErrNone ) {
		view->ReadTextL( (TPtrC) COMMDB_NAME, name );
		CUUAux::Unicode2UTF8( str, name );
		if(strcmp(str,"MMIM_CMNET")==0)
			hasMMIM=ETrue;
		err = view->GotoNextRecord();
	}
	if(!hasMMIM){
		CApDataHandler* ap=CApDataHandler::NewLC(*db);
		CApAccessPointItem* apitem=CApAccessPointItem::NewLC();
		TUint32 dftuid;
		apitem->SetNamesL(_L("MMIM_CMNET"));
		TUint32 uid;
		uid=ap->CreateFromDataL(*apitem); 
		CleanupStack::PopAndDestroy(2); 

		err = view->GotoFirstRecord();
		while ( err == KErrNone ) {
			view->ReadTextL( (TPtrC) COMMDB_NAME, name );
			CUUAux::Unicode2UTF8( str, name );
			if(strcmp(str,"MMIM_CMNET")==0) {
				view->ReadUintL( (TPtrC) COMMDB_ID, iIapId );
			}
			err = view->GotoNextRecord();
		}
	}

	CleanupStack::PopAndDestroy(2); 
	*/
}

void CIAPSettingItem::HandleTextArrayUpdateL()
{
	CAknEnumeratedTextPopupSettingItem::HandleTextArrayUpdateL();
}

/*
const TDesC& CIAPSettingItem::SettingTextL()
{
	return CAknEnumeratedTextPopupSettingItem::SettingTextL();
}
*/

// ================= MEMBER FUNCTIONS =========================================

CSettingListbox::CSettingListbox() : iIAPItem( 0 ), iData( 0 )
{
}

CSettingListbox::~CSettingListbox()
{
}

CAknSettingItem* CSettingListbox::CreateSettingItemL( TInt aIdentifier )
    {
    CAknSettingItem* settingItem = NULL;

    switch (aIdentifier)
    {
	case ESettingConnect:
        iAutoConnectItem = new (ELeave) 
			CAknBinaryPopupSettingItem( aIdentifier, iData->iAutoConnect );
		settingItem = iAutoConnectItem;
		break;

    case ESettingPort:
        iServerPortItem = new (ELeave) 
			CAknIntegerEdwinSettingItem( aIdentifier, iData->iPort );
		settingItem = iServerPortItem;
        break;

    case ESettingUserName:
         iUserIDItem = new (ELeave)
			CAknTextSettingItem(aIdentifier, iData->iUserID);
		 settingItem =iUserIDItem;
		break;

    case ESettingPswd:
		iUserPasswordItem = new (ELeave)
			CAknPasswordSettingItem(aIdentifier,CAknPasswordSettingItem::EAlpha, iData->iUserPassword);
		settingItem=iUserPasswordItem;
		break;

    case ESettingIAP:
		iIapTemp = 0;
        iIAPItem = new (ELeave) 
			CIAPSettingItem( aIdentifier, iIapTemp, iData->iIapId );
		settingItem = iIAPItem;
        break;
    }
    return settingItem;
    }


// ----------------------------------------------------------------------------
// TKeyResponse CAknExSettingListListbox::OfferKeyEventL( const TKeyEvent&,
//  TEventCode )
// Handles the key events.
// ----------------------------------------------------------------------------
//
TKeyResponse CSettingListbox::OfferKeyEventL(
    const TKeyEvent& aKeyEvent, TEventCode aType )
    {
    if ( aType != EEventKey ) // Is not key event?
        {
        return EKeyWasNotConsumed;
        }

    switch ( aKeyEvent.iCode ) // The code of key event is...
        {
        case EKeySpace: // Space key.
            break;

	        default:
            CAknSettingItemList::OfferKeyEventL(aKeyEvent, aType);
            break;
        }
    return EKeyWasConsumed;
    }

// ----------------------------------------------------------------------------
// CAknExSettingListListbox::SizeChanged
// Size changed handler
// ----------------------------------------------------------------------------
//
void CSettingListbox::SizeChanged()
    {
    if (ListBox()) 
        {
        ListBox()->SetRect(Rect());
        }
    }

void CSettingListbox::SetData( CSettingData* aData )
{
	iData = aData;
}

void CSettingListbox::RetrieveIapId()
{
	iData->iIapId = 0;
	
	if ( !iIAPItem ) {
		return;
	}

	CCommsDatabase* db = CCommsDatabase::NewL( EDatabaseTypeIAP );
	CleanupStack::PushL( db );

	CCommsDbTableView* tv = db->OpenViewMatchingTextLC ( (TPtrC)IAP, (TPtrC)(COMMDB_NAME), iIAPItem->SettingTextL() ); 

	TInt resolveResult = KErrNone;
	resolveResult = tv->GotoFirstRecord();

	if ( resolveResult == KErrNone ) {
		tv->ReadUintL( (TPtrC) COMMDB_ID, iData->iIapId );
	}

	CleanupStack::PopAndDestroy( 2 ); 

	//SYS_TRACE2( 0, "Iap Uid", iData->iIapId );
}

void CSettingListbox::ValidateIapSelection( TUint32 iapid )
{
	iIAPItem->SetIapId( iapid );
	iIAPItem->SelectItemByIapId();
	//UpdateListBoxTextL();
	HandleChangeInItemArrayOrVisibilityL();
}

// End of File

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -