现在的位置: 首页 > 综合 > 正文

设置列表

2013年08月24日 ⁄ 综合 ⁄ 共 9819字 ⁄ 字号 评论关闭

1.设置列表项的类别(AVKON_SETTING_ITEM)
    Binary Switch(二进制开关)
    Text Editor (编辑)
    Enumerated Text (多选一)
    Alphanumeric Password Editor (密码)
    Numeric Password Editor (数字密码)
    Slider (滑块)
    Volume Control (音量条)
    Time Editor (时间)
    Date Editor (日期)
    IP Address Editor (IP)

2.在hrh中定义identifier
enum ... {
    EBs = 1,
    ETe1,
    EEt,
    EApe,
    ENpe,
    ES,
    EVc,
    ETe2,
    EDe,
    EIae
}

3.设置列表资源
RESOURCE AVKON_SETTING_ITEM_LIST r_settinglist_setting
{
    flags = 0;
    items =
    {
        //Binary Switch
     AVKON_SETTING_ITEM
     {
         identifier = EBs;
            setting_page_resource = r_binary_setting_page;
            associated_resource = r_popup_setting_binary_texts;
            name = qtn_bs_name;
     },
     //Text Editor
     AVKON_SETTING_ITEM
     {
         identifier = ETe1;
            setting_page_resource = r_text_setting_page;
            name = qtn_text_name;
     },
     //Enumerated Text
     AVKON_SETTING_ITEM
     {
         identifier = EEt;
            setting_page_resource = r_enumtext_setting_page;
            associated_resource = r_popup_setting_list;
            name = qtn_enumtext_name;
     },
     //Alphanumeric Password Editor
     AVKON_SETTING_ITEM
     {
         identifier = EApe;
            setting_page_resource = r_alpha_password_setting_page;
            name = qtn_alpha_name;
     },
     //Numeric Password Editor
     AVKON_SETTING_ITEM
     {
         identifier = ENpe;
            setting_page_resource = r_numeric_password_setting_page;
            name = qtn_numeric_name;
     },
     //Slider
     AVKON_SETTING_ITEM
     {
         identifier = ES;
            setting_page_resource = r_slider_setting_page;
            name = qtn_slider_name;
     },
     //Volume Control
     AVKON_SETTING_ITEM
     {
         identifier = EVc;
            setting_page_resource = r_volume_setting_page;
            name = qtn_volume_name;
     },
     //Time Editor
     AVKON_SETTING_ITEM
     {
         identifier = ETe2;
            setting_page_resource = r_time_setting_page;
            name = qtn_time_name;
     },
     //Date Editor
     AVKON_SETTING_ITEM
     {
         identifier = EDe;
            setting_page_resource = r_date_setting_page;
            name = qtn_date_name;
     },
     //IP Address Editor
     AVKON_SETTING_ITEM
     {
         identifier = EIae;
            setting_page_resource = r_ip_address_setting_page;
            name = qtn_ip_editor_name;
     }
    };
}

4.各项小资源
------------------------------------------------------------------------
Binary Switch:

RESOURCE AVKON_SETTING_PAGE r_binary_setting_page
{
    label= qtn_bs_name;
    type = EAknCtPopupSettingList;
    editor_resource_id = r_binary_edit; //此行支持弹出式修改(没有则只支持确认键修改)
}

RESOURCE POPUP_SETTING_LIST r_binary_edit
{
    flags = EAknPopupSettingListFlagInitialised; //no other
}

RESOURCE AVKON_POPUP_SETTING_TEXTS r_popup_setting_binary_texts
{
    setting_texts_resource = r_on_off_texts;
    popped_up_texts_resource = r_popped_up_on_off_texts;
}

RESOURCE ARRAY r_on_off_texts
{
    items =
    {
        AVKON_ENUMERATED_TEXT { value=1; text = qtn_texts_on; },
        AVKON_ENUMERATED_TEXT { value=0; text = qtn_texts_off; }
    };
}

RESOURCE ARRAY r_popped_up_on_off_texts
{
    items =
    {
        LBUF { txt = qtn_texts_on; },
        LBUF { txt = qtn_texts_off; }
    };
}
------------------------------------------------------------------------
Text Editor:

RESOURCE AVKON_SETTING_PAGE r_text_setting_page
{
    label = qtn_text_name;
    type = EEikCtEdwin;
    editor_resource_id = r_settinglist_edwin;
}

RESOURCE EDWIN r_settinglist_edwin
{
    lines = 0;
    maxlength = 0;
}
------------------------------------------------------------------------
Enumerated Text:

RESOURCE AVKON_SETTING_PAGE r_enumtext_setting_page
{
    label= qtn_enumtext_name;
    type = EAknCtPopupSettingList;
    editor_resource_id = r_popup_setting_list_entry;
}

RESOURCE POPUP_SETTING_LIST r_popup_setting_list_entry
{
    flags = EAknPopupSettingListFlagInitialised; //no other
}

RESOURCE AVKON_POPUP_SETTING_TEXTS r_popup_setting_list
{
    setting_texts_resource = r_settinglist_page_list;
    popped_up_texts_resource = r_settinglist_list_item_array;
}

RESOURCE ARRAY r_settinglist_page_list
{
    items =
    {
       AVKON_ENUMERATED_TEXT {value = 0;text = qtn_item_list0;},
       AVKON_ENUMERATED_TEXT {value = 1;text = qtn_item_list1;},
       AVKON_ENUMERATED_TEXT {value = 2;text = qtn_item_list2;},
       AVKON_ENUMERATED_TEXT {value = 3;text = qtn_item_list3;}
    };
}

RESOURCE ARRAY r_settinglist_list_item_array
{
    items =
    {
       LBUF { txt = qtn_item_list0; },
       LBUF { txt = qtn_item_list1; },
       LBUF { txt = qtn_item_list2; },
       LBUF { txt = qtn_item_list3; }
    };
 }
 ------------------------------------------------------------------------
 Alphanumeric Password Editor:

RESOURCE AVKON_SETTING_PAGE r_alpha_password_setting_page
{
    label = qtn_alpha_name;
    type = EEikCtSecretEd;
    editor_resource_id = r_settinglist_alpha_password;
}

RESOURCE SECRETED r_settinglist_alpha_password
{
    num_letters = 10;
}
 ------------------------------------------------------------------------
 Numeric Password Editor:

RESOURCE AVKON_SETTING_PAGE r_numeric_password_setting_page
{
    label = qtn_numeric_name;
    type = EAknCtNumericSecretEditor;
    editor_resource_id = r_settinglist_numeric_password;
}

RESOURCE NUMSECRETED r_settinglist_numeric_password
{
    num_code_chars = 10;
}
 ------------------------------------------------------------------------
 Slider:

RESOURCE AVKON_SETTING_PAGE r_slider_setting_page
{
    label = qtn_slider_name;
    type = EAknCtSlider;
    editor_resource_id = r_settinglist_slider;
}

RESOURCE SLIDER r_settinglist_slider
{
    layout = EAknSettingsItemSliderLayout;
    minvalue = 0;
    maxvalue = 100;
    step = 10;
    valuetype = EAknSliderValuePercentage;
    minlabel = qtn_slider_minlabel;
    maxlabel = qtn_slider_maxlabel;
}
------------------------------------------------------------------------
Volume Control:

RESOURCE AVKON_SETTING_PAGE r_volume_setting_page
{
    label = qtn_volume_name;
    type = EAknCtVolumeControl;
    editor_resource_id = r_settinglist_volume;
}

RESOURCE VOLUME r_settinglist_volume
{
    flags = ESettingsVolumeControl;
    value = 10; //volume's value must be from 1 to 10 in construct
}
------------------------------------------------------------------------
Time Editor:

RESOURCE AVKON_SETTING_PAGE r_time_setting_page
{
    label = qtn_time_name;
    type = EEikCtTimeEditor;
    editor_resource_id = r_settinglist_time_editor;
}

RESOURCE TIME_EDITOR r_settinglist_time_editor
{
    minTime = TIME
    {
        second = 0;
        minute = 0;
        hour = 0;
    };
    maxTime = TIME
    {
        second = 59;
        minute = 59;
        hour = 23;
    };
}
------------------------------------------------------------------------
Date Editor:

RESOURCE AVKON_SETTING_PAGE r_date_setting_page
{
    label= qtn_date_name;
    type = EEikCtDateEditor;
    editor_resource_id = r_settinglist_date;
}

RESOURCE DATE_EDITOR r_settinglist_date
{
    minDate= DATE {year=1980;};
    maxDate= DATE {year=2060;};
}
------------------------------------------------------------------------
IP Address Editor:

RESOURCE AVKON_SETTING_PAGE r_ip_address_setting_page
{
    label= qtn_ip_editor_name;
    type = EAknCtIpFieldEditor;
    editor_resource_id = r_settinglist_ip_editor;
}

RESOURCE IP_FIELD_EDITOR r_settinglist_ip_editor
{
    min_field_values = IP_FIELD
    {
        first_field = 0;
        second_field = 0;
        third_field = 0;
        fourth_field = 0;
    };
    max_field_values = IP_FIELD
    {
        first_field = 255;
        second_field = 255;
        third_field = 255;
        fourth_field = 255;
    };
}
------------------------------------------------------------------------

5.自定义CAknSettingItemList派生类,重写CreateSettingItemL(TInt aSettingId)
//.h
#include <aknsettingitemlist.h>

class CSettingList : public CAknSettingItemList {
public:
 CSettingList();
 virtual ~CSettingList() {}

public:
 void ChangeL(); // CEikListbox lib: eikcoctl.lib

private: //override
 void EditItemL(TInt aIndex, TBool aCalledFromMenu);
 CAknSettingItem * CreateSettingItemL(TInt aSettingId);
 void Construct();

private:
 TBool   iBinarySwitch;
 TBuf<64>  iTextEditor;
 TInt  iEnumeratedText;
 TBuf<16> iAlphanumericPasswordEditor;
 TBuf<16> iNumericPasswordEditor;
 TInt  iSlider;
 TInt  iVolumeControl;
 TTime  iTimeEditor;
 TTime  iDateEditor;
 TInetAddr iIPAddressEditor; //lib: insock.lib
};

//.cpp
#include "project.hrh"
#include "settinglist.h"

CSettingList::CSettingList() {
 Construct();
}

void CSettingList::ChangeL() {
    EditItemL(ListBox()->CurrentItemIndex(), ETrue);
}

CAknSettingItem* CSettingList::CreateSettingItemL(TInt aSettingId) {
    CAknSettingItem* item = NULL;
    switch (aSettingId) {
        case EBs: {
   item = new(ELeave) CAknBinaryPopupSettingItem(aSettingId, iBinarySwitch);
   break;
        }
        case ETe1: {
   item = new(ELeave) CAknTextSettingItem(aSettingId, iTextEditor);
   break;
        }
        case EEt: {
            item = new(ELeave) CAknEnumeratedTextPopupSettingItem(aSettingId, iEnumeratedText);
            break;
        }
        case EApe: {
   item = new(ELeave) CAknPasswordSettingItem(aSettingId, CAknPasswordSettingItem::EAlpha, iAlphanumericPasswordEditor);
   break;
  }
        case ENpe: {
   item = new(ELeave) CAknPasswordSettingItem(aSettingId, CAknPasswordSettingItem::ENumeric, iNumericPasswordEditor);
   break;
  }
        case ES: {
   item = new(ELeave) CAknSliderSettingItem(aSettingId, iSlider);
   break;
  }
        case EVc: {
            item = new(ELeave) CAknVolumeSettingItem(aSettingId, iVolumeControl);
            break;
        }
        case ETe2: {
   item = new(ELeave) CAknTimeOrDateSettingItem(aSettingId, CAknTimeOrDateSettingItem::ETime, iTimeEditor);
   break;
  }
        case EDe: {
   item = new(ELeave) CAknTimeOrDateSettingItem(aSettingId, CAknTimeOrDateSettingItem::EDate, iDateEditor);
   break;
  }
        case EIae: {
   item = new(ELeave) CAknIpFieldSettingItem(aSettingId, iIPAddressEditor);
   break;
  }
        default: {
            User::Leave(KErrNotFound);
            break;
        }
    }

    return item;
}

void CSettingList::EditItemL(TInt aIndex, TBool aCalledFromMenu) {
    CAknSettingItemList::EditItemL(aIndex, aCalledFromMenu);

    CAknSettingItem& item= *(SettingItemArray()->operator[](aIndex));
    item.StoreL();
    item.UpdateListBoxTextL(); //即时刷新
}

void CSettingList::Construct() {
 // TODO:
 iVolumeControl = 1; //volume mustn't be 0
 TDateTime date;
 date.SetYear(1980);
 date.SetMonth(EJanuary);
 date.SetDay(0);
 iDateEditor = date;
}

6.使用
CSettingList* iList = new(ELeave) CSettingList();
iList->SetMopParent(this);
iList->SetContainerWindowL(*this);
iList->ConstructFromResourceL(R_SETTINGLIST_SETTING);

抱歉!评论已关闭.