Attention!
void InitDialogItems(
const struct InitDialogItem *Init,
struct FarDialogItem *Item,
int ItemsNumber
)
{
int I;
const struct InitDialogItem *PInit=Init;
struct FarDialogItem *PItem=Item;
for (I=0; I < ItemsNumber; I++,PItem++,PInit++)
{
PItem->Type=PInit->Type;
PItem->X1=PInit->X1;
PItem->Y1=PInit->Y1;
PItem->X2=PInit->X2;
PItem->Y2=PInit->Y2;
PItem->Focus=PInit->Focus;
PItem->Reserved=PInit->Selected;
PItem->Flags=PInit->Flags;
PItem->DefaultButton=PInit->DefaultButton;
if ((unsigned int)PInit->Data < 2000)
strcpy(PItem->Data,GetMsg((unsigned int)PInit->Data));
else
strcpy(PItem->Data,PInit->Data);
}
}
None.
Use of the InitDialogItems function is reasoned by the following:
FarDialogItem.Data variable is large, that's why direct
initalization of an array of FarDialogItem structures may significantly increase
memory usage.
The example bellow shows how to use the InitDialogItems function and the InitDialogItem structure to create a dialog.
TempPanel plugin configuration dialog sample:
int Config()
{
struct InitDialogItem InitItems []={
DI_DOUBLEBOX,3,1,72,8,0,0,0,0,(char *)MConfigTitle,
DI_CHECKBOX,5,2,0,0,0,0,0,0,(char *)MConfigAddToDisksMenu,
. . .
DI_BUTTON,0,7,0,0,0,0,DIF_CENTERGROUP,1,(char *)MOk,
DI_BUTTON,0,7,0,0,0,0,DIF_CENTERGROUP,0,(char *)MCancel
};
struct FarDialogItem DialogItems[sizeof(InitItems)/sizeof(InitItems[0])];
. . .
InitDialogItems(InitItems,DialogItems,sizeof(InitItems)/sizeof(InitItems[0]));
. . .
int ExitCode=Info.Dialog(Info.ModuleNumber,
-1,-1,76,10,
"TempCfg",DialogItems,
sizeof(DialogItems)/sizeof(DialogItems[0]));
if (ExitCode != 7)
return(FALSE);
. . .
}