|
|
User login
Feeds |
Phone nr prompt?
|
|||||
| Fri, 2004-11-19 14:22 | |
|
I wonder how to get a phone number prompt. I have tried the following:
Code: DLG_LINE { //Mobile phone type = EEikCtNumberEditor; prompt = qtn_contact_form_phone_mobile; id = EAknExScrollerDlgLineNumberMobilePhone; itemflags = EEikDlgItemSeparatorAfter; control = NUMBER_EDITOR { max = 99999999999; }; } However, the above does not store zero in the beginning and accepts only numbers in intervals. Phone numbers can also contain a '+' sign. Thanks in advance, Joachim |
|
Forum posts: 982
pirosl
Forum posts: 349
Could you give an example, since I'm not at all sure how to write it.
I found an example in a book that suggested something like below. However, this gives me a BAFL 15 panic (I have read what it means, but I still don't know where the error can be) when i do ExecuteLD on the resource. Maybe you can see what's wrong with the code below?
type = EEikCtEdwin;
prompt = qtn_contact_form_phone_mobile;
id = EAknExScrollerDlgLineEdwinMobilePhone;
itemflags = EEikDlgItemSeparatorAfter;
control = AVKON_DATA_QUERY {
layout = EPhoneLayout;
control = EDWIN {};
};
}
I also have
{
flags = EEikDialogFlagNoDrag | EEikDialogFlagFillAppClientRect | EEikDialogFlagWait
| EEikDialogFlagButtonsRight | EEikDialogFlagNoTitleBar
| EEikDialogFlagCbaButtons /*| EEikDialogFlagModeless */;
buttons = r_termapp_view2;
form = r_contact_form;
}
RESOURCE FORM r_contact_form
{
flags = EAknExScrollerInt0;
items = {
DLG_LINE {
type = EEikCtEdwin;
prompt = qtn_contact_form_first_name;
id = EAknExScrollerDlgLineEdwinFirstName;
control = EDWIN {
maxlength = EAknExScrollerInt256;
width = EAknExScrollerInt6;
lines = EAknExScrollerInt5;
};
},
DLG_LINE {
type = EEikCtEdwin;
prompt = qtn_contact_form_last_name;
id = EAknExScrollerDlgLineEdwinLastName;
control = EDWIN {
maxlength = EAknExScrollerInt256;
width = EAknExScrollerInt6;
lines = EAknExScrollerInt5;
};
},
DLG_LINE {
type = EEikCtEdwin;
prompt = qtn_contact_form_address;
id = EAknExScrollerDlgLineEdwinAddress;
control = EDWIN {
maxlength = EAknExScrollerInt256;
width = EAknExScrollerInt6;
lines = EAknExScrollerInt5;
};
},
DLG_LINE {
type = EEikCtNumberEditor;
prompt = qtn_contact_form_postal_nr;
id = EAknExScrollerDlgLineNumberPostnummer;
control = NUMBER_EDITOR {
min = EAknExScrollerInt0;
max = EAknExScrollerInt10;
};
},
DLG_LINE {
type = EEikCtEdwin;
prompt = qtn_contact_form_city;
id = EAknExScrollerDlgLineEdwinCity;
control = EDWIN {
maxlength = EAknExScrollerInt256;
width = EAknExScrollerInt6;
lines = EAknExScrollerInt5;
};
},
DLG_LINE { //Mobile phone
type = EEikCtEdwin;
prompt = qtn_contact_form_phone_mobile;
id = EAknExScrollerDlgLineEdwinMobilePhone;
itemflags = EEikDlgItemSeparatorAfter;
control = AVKON_DATA_QUERY {
layout = EPhoneLayout;
control = EDWIN {};
};
},
};
}
Forum posts: 982
type = EEikCtNumberEditor;
prompt = qtn_contact_form_phone_mobile;
id = EAknExScrollerDlgLineNumberMobilePhone;
control = EDWIN {
maxlength = some_value;
width = some_value;
lines = some_value;
};
};
}
this will be the dialog line in your resource file.
pirosl
Forum posts: 349
It also gives me a EIKON-DIALOG 0 panic.
Forum posts: 982
Why to have a min or max value? what's the value for +449922222111341 or for 22111222pw2222 (which means dial to 22111222 make a pause and send 2222 as a dtmf sequence) for example?
pirosl
Forum posts: 349
Why to have a min or max value? what's the value for +449922222111341 or for 22111222pw2222 (which means dial to 22111222 make a pause and send 2222 as a dtmf sequence) for example?
If I don't misunderstand you totally, I don't think you read carefully what I wrote:
But a phone number should NOT have a max or min value.
I also get a EIKON-DIALOG 0 panic.
Thanks
Forum posts: 982
type = EAknCtIntegerEdwin;
prompt = qtn_contact_form_phone_mobile;
id = EAknExScrollerDlgLineNumberMobilePhone;
control = EDWIN {
maxlength = some_value;
width = some_value;
lines = some_value;
};
};
}
This will be the resource. maxlength refers to how many characters can you prompt there, whidh and lines are obvious
pirosl
Forum posts: 349
Forum posts: 982
Can you provide the pice of code where you're creating your dialog/form?
pirosl
Forum posts: 349
#include <avkon.hrh>
#include <TerminalApp.rsg>
#include "terminalapp.hrh"
#include "TermView2.h"
#include "TerminalAppContainer2.h"
#include "TerminalAppAppUi.h"
#include <eikbtgpc.h>
#include <TPbkContactItemField.h>
#include <aknmessagequerydialog.h>
#include <CPbkContactItem.h>
#include <EikMenub.h>
#include <BCardEng.h>
#include "CommonConstants.h"
CTerminalAppContactForm*
CTerminalAppContactForm::
NewL(CPbkContactItem* contactInfo, CTermView2* aView)
{
CTerminalAppContactForm* self = new (ELeave) CTerminalAppContactForm(contactInfo, aView);
CleanupStack::PushL(self);
self->ConstructL();
CleanupStack::Pop();
return self;
}
CTerminalAppContactForm::~CTerminalAppContactForm() {}
CTerminalAppContactForm::CTerminalAppContactForm(CPbkContactItem* contactInfo, CTermView2* aView)
: iContactInfo(contactInfo), iView(aView) {}
void CTerminalAppContactForm::ConstructL() { CAknForm::ConstructL(); }
void CTerminalAppContactForm::SetFormData()
{
if (ControlOrNull(EAknExScrollerDlgLineEdwinFirstName))
SetEdwinTextL(EAknExScrollerDlgLineEdwinFirstName,
&iContactInfo->FindField(EPbkFieldIdFirstName)->Text());
if (ControlOrNull(EAknExScrollerDlgLineEdwinLastName))
SetEdwinTextL(EAknExScrollerDlgLineEdwinLastName,
&iContactInfo->FindField(EPbkFieldIdLastName)->Text());
if (ControlOrNull(EAknExScrollerDlgLineEdwinAddress))
SetEdwinTextL(EAknExScrollerDlgLineEdwinAddress,
&iContactInfo->FindField(EPbkFieldIdStreetAddress)->Text());
if (ControlOrNull(EAknExScrollerDlgLineEdwinCity))
SetEdwinTextL(EAknExScrollerDlgLineEdwinCity,
&iContactInfo->FindField(EPbkFieldIdCity)->Text());
if (ControlOrNull(EAknExScrollerDlgLineEdwinMobilePhone)) {
TPbkContactItemField* fld = iContactInfo->FindField(EAknExScrollerDlgLineEdwinMobilePhone);
if (fld != NULL) { //The field is included in the response from the server
//Remove '+' sign
TBuf16<18> buf;
buf.Append(fld->Text());
TInt pos = buf.Find(gTerminalAppPlus());
if (pos != KErrNotFound)
buf.Replace(pos, 1, _L(""));
SetEdwinTextL(EAknExScrollerDlgLineEdwinMobilePhone, &buf);
}
}
if (ControlOrNull(EAknExScrollerDlgLineNumberHomePhone)) {
TPbkContactItemField* fld = iContactInfo->FindField(EAknExScrollerDlgLineNumberHomePhone);
if (fld != NULL) {
//Remove '+' sign
TBuf<180> buf;
buf.Append(fld->Text());
TInt pos = buf.Find(gTerminalAppPlus());
if (pos != KErrNotFound)
buf.Replace(pos, 1, _L(""));
//Translate to integer
TLex lex(buf);
TInt val;
lex.Val(val);
SetNumberEditorValue(EAknExScrollerDlgLineNumberHomePhone, val);
}
}
if (ControlOrNull(EAknExScrollerDlgLineNumberWorkPhone)) {
TPbkContactItemField* fld = iContactInfo->FindField(EAknExScrollerDlgLineNumberWorkPhone);
if (fld != NULL) {
//Remove '+' sign
TBuf<18> buf;
buf.Append(fld->Text());
TInt pos = buf.Find(gTerminalAppPlus());
if (pos != KErrNotFound)
buf.Replace(pos, 1, _L(""));
//Translate to integer
TLex lex(buf);
TInt val;
lex.Val(val);
SetNumberEditorValue(EAknExScrollerDlgLineNumberWorkPhone, val);
}
}
}
void CTerminalAppContactForm::PostLayoutDynInitL()
{
CAknForm::PostLayoutDynInitL();
SetFormData();
}
TBool CTerminalAppContactForm::QuerySaveChangesL()
{
TBool isAnsYes(CAknForm::QuerySaveChangesL());
return isAnsYes;
}
void CTerminalAppContactForm::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
{
CAknForm::DynInitMenuPaneL(aResourceId, aMenuPane);
if (aResourceId == R_AVKON_FORM_MENUPANE) {
aMenuPane->SetItemDimmed(EAknFormCmdAdd, ETrue);
aMenuPane->SetItemDimmed(EAknFormCmdLabel, ETrue);
}
}
TBool
CTerminalAppContactForm::
OkToExitL(TInt aButtonId)
{
switch (aButtonId) {
case EAknExScrollerCBACommnadNext:
{
CAknMessageQueryDialog* dlg =
CAknMessageQueryDialog::NewL(_L("Vill du spara i adressboken?"));
dlg->PrepareLC(R_DIALOG_POPUP_QUERY);
dlg->QueryHeading()->SetTextL(_L("Spara"));
if (dlg->RunLD()) //Save to address book if Yes
((CTerminalAppAppUi*) iView->GetAppUi())->pbkEngine->AddNewContactL(*iContactInfo);
break;
}
default:
return CAknForm::OkToExitL(aButtonId);
}
return ETrue;
}
void* CTermView2::GetAppUi() { return (CTerminalAppAppUi*) AppUi(); }
void CTermView2::ConstructL()
{
BaseConstructL();
EditMode = EFalse;
}
CTermView2::~CTermView2()
{
if (iContainer) {
AppUi()->RemoveFromViewStack(*this, iContainer);
delete iContainer;
}
}
void CTermView2::HandleCommandL(TInt aCommand)
{
switch (aCommand) {
default:
{
AppUi()->HandleCommandL(aCommand);
break;
}
}
}
void CTermView2::HandleClientRectChange()
{
if (iContainer)
iContainer->SetRect(ClientRect());
}
void CTermView2::DoActivateL(const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/,
const TDesC8& /*aCustomMessage*/)
{
if (!iContainer) {
iContainer = new (ELeave) CTerminalAppContainer2;
iContainer->ConstructL(ClientRect());
AppUi()->AddToStackL(*this, iContainer);
}
iContactForm = CTerminalAppContactForm::NewL(((CTerminalAppAppUi*) AppUi())->contact, this);
TInt retVal = iContactForm->ExecuteLD(R_CONTACT_DIALOG);
//Send the address to the Vykort application
TUid idiot = {1};
((CTerminalAppAppUi*) AppUi())->ActivateView(idiot);
}
void CTermView2::DoDeactivate()
{
if (iContainer) {
AppUi()->RemoveFromViewStack(*this, iContainer);
delete iContainer;
iContainer = NULL;
}
}
void CTermView2::ChangeCbaL(TBool /*state*/)
{
CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
cba->DrawNow();
}
TBuf<10> CTermView2::GetTelNrFromView() { return ((CTerminalAppAppUi*) AppUi())->telNrFromView; }
void CTermView2::ReloadData() {}
TUid CTermView2::Id() const { return KViewId2; }
void CTermView2::ShowRetreivedAddress(CPbkContactItem* contactInfo)
{
if (!iContainer) {
iContainer = new (ELeave) CTerminalAppContainer2;
iContainer->ConstructL(ClientRect());
AppUi()->AddToStackL(*this, iContainer);
}
}
{
flags = EEikDialogFlagNoDrag | EEikDialogFlagFillAppClientRect | EEikDialogFlagWait
| EEikDialogFlagButtonsRight | EEikDialogFlagNoTitleBar
| EEikDialogFlagCbaButtons /*| EEikDialogFlagModeless */;
buttons = r_termapp_view2;
form = r_contact_form;
}
RESOURCE FORM r_contact_form
{
flags = EAknExScrollerInt0;
items = {
DLG_LINE {
type = EEikCtEdwin;
prompt = qtn_contact_form_first_name;
id = EAknExScrollerDlgLineEdwinFirstName;
control = EDWIN {
maxlength = EAknExScrollerInt256;
width = EAknExScrollerInt6;
lines = EAknExScrollerInt5;
};
},
DLG_LINE {
type = EEikCtEdwin;
prompt = qtn_contact_form_last_name;
id = EAknExScrollerDlgLineEdwinLastName;
control = EDWIN {
maxlength = EAknExScrollerInt256;
width = EAknExScrollerInt6;
lines = EAknExScrollerInt5;
};
},
DLG_LINE {
type = EEikCtEdwin;
prompt = qtn_contact_form_address;
id = EAknExScrollerDlgLineEdwinAddress;
control = EDWIN {
maxlength = EAknExScrollerInt256;
width = EAknExScrollerInt6;
lines = EAknExScrollerInt5;
};
},
DLG_LINE {
type = EEikCtNumberEditor;
prompt = qtn_contact_form_postal_nr;
id = EAknExScrollerDlgLineNumberPostnummer;
control = NUMBER_EDITOR {
min = EAknExScrollerInt0;
max = EAknExScrollerInt10;
};
},
DLG_LINE {
type = EEikCtEdwin;
prompt = qtn_contact_form_city;
id = EAknExScrollerDlgLineEdwinCity;
control = EDWIN {
maxlength = EAknExScrollerInt256;
width = EAknExScrollerInt6;
lines = EAknExScrollerInt5;
};
},
DLG_LINE { //Mobile phone
type = EAknCtIntegerEdwin;
prompt = qtn_contact_form_phone_mobile;
id = EAknExScrollerDlgLineEdwinMobilePhone;
itemflags = EEikDlgItemSeparatorAfter;
control = EDWIN {
maxlength = EAknExScrollerInt256;
width = EAknExScrollerInt6;
lines = EAknExScrollerInt5;
};
},
//Don't bother about these - I will do with them as I do with EAknExScrollerDlgLineEdwinMobilePhone
DLG_LINE { //Home phone
type = EEikCtNumberEditor;
prompt = qtn_contact_form_phone_home;
id = EAknExScrollerDlgLineNumberHomePhone;
itemflags = EEikDlgItemSeparatorAfter;
control = NUMBER_EDITOR {
max = 99999999999;
};
},
DLG_LINE { //Home phone
type = EEikCtNumberEditor;
prompt = qtn_contact_form_phone_work;
id = EAknExScrollerDlgLineNumberWorkPhone;
itemflags = EEikDlgItemSeparatorAfter;
control = NUMBER_EDITOR {
max = 99999999999;
};
}
};
}
Forum posts: 31
have you resolved this? if you haven't try following, works for me:
    DLG_LINE {
      type = EEikCtEdwin;
      prompt = p_number;
      id = EAknFormEdwinNroId;
      itemflags = EEikDlgItemTakesEnterKey | EEikDlgItemOfferAllHotKeys;
      control = EDWIN {
        flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable;
        width = EDWIN_WIDTH;
        lines = EDWIN_LINES;
        maxlength = EAknExFormEdwinNumberMaxLength;
        numeric_keymap = EAknEditorStandardNumberModeKeymap;
        allowed_input_modes = EAknEditorNumericInputMode;
        default_input_mode = EAknEditorNumericInputMode;
        max_view_height_in_lines = 5;
        base_line_delta = 21;
       };
    }