questions about data strcuture
Hi,
I am currently developping a software where items that will be inserted
into a graphical widget ListCtrl are first defined in static array as
shown below :
enum TUiContext
{
EUiContextMain = 0,
EUiContextSchedule,
EUiContextSettings,
EUiContextSubscription,
EUiContextCount
};
typedef struct
{
int TextId;
int ImgId;
int Param;
int nOptInfo;
TCHAR szImgName[MAX_PATH];
} ListInfo_t, *LPListInfo_t;
ListInfo_t CMainView::ms_listInfo_Main[]=
{
// String ID, Img, Param = CmdBarId Enabled ImgName
{ IDS_MENU_BACKUP, 0, IDM_MENU_CMDBAR_BACKUP, TRUE, _T( "" ) },
{ IDS_MENU_SCHEDULE, 2, IDM_MENU_CMDBAR_OPTIONS, TRUE, _T( "" ) },
{ IDS_MENU_RESTORE, 1, IDM_MENU_CMDBAR_RESTORE, TRUE, _T( "" ) },
{ IDS_MENU_MANAGE_SUBSCRIPTION, -1, IDM_MENU_MANAGE_SUBSCRIPTION,
TRUE, _T( "Menu_Account_Manage.png" ) },
};
ListInfo_t CMainView::ms_listInfo_Options[]=
{
// String ID, Img, Param = CmdBarId
{ IDS_MENU_FREQUENCY, 0, IDM_MENU_SCHEDULER, TRUE, _T( "" ) },
{ IDS_MENU_CONTENT, 1, IDM_MENU_SELECTDB, TRUE, _T( "" ) },
};
....
Actually in functions of some parameters, some items won't be inserted
and the field nOptInfo is used for this purpose. If this field equals 1
it will be inserted into the List.
So I have a method called InitResources that check the config parameters
and update nOptInfo for each array.
Once this has been done, I build a vector as shown below :
void CMainView::InitResources()
{
std::vector<ListInfo_t> vecListInfo;
std::map<TUiContext, std::vector<ListInfo_t> > listMap;
// Test config parameters and update nOptInfo
...
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
// Now build vector from ms_listInfo_Main
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
vecListInfo.clear()
for (int i = 0; i < _countof(ms_listInfo_Main); i++)
{
if (ms_listInfo_Main[i].nOptInfo == TRUE){
vecListInfo.push_back(ms_listInfo_Main[i]);
}
}
listMap[ EUiContextMain ] = vecListInfo;
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
// Now build vector from ms_listInfo_Options
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
vecListInfo.clear()
for (int i = 0; i < _countof(ms_listInfo_Options); i++)
{
if (ms_listInfo_Options[i].nOptInfo == TRUE){
vecListInfo.push_back(ms_listInfo_Options[i]);
}
}
listMap[ EUiContextSchedule] = vecListInfo;
...
}
I find all this code very ugly and I would like to suggestion to improve
it. I am doing all this because I am switching between different
graphical context and before to do it I save the index of current
selected item in my ListCtrl.