📄 settinglistbox.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 + -