wrc: Merge the menuitem and menuitemex structures.

This commit is contained in:
Alexandre Julliard 2010-01-04 12:31:22 +01:00
parent 0fb8203654
commit 1b305dd2df
7 changed files with 95 additions and 181 deletions

View file

@ -607,7 +607,7 @@ static void dump_dialog(const dialog_t *dlg)
/*
*****************************************************************************
* Function : dump_menu_item
* Syntax : void dump_menu_item(const menu_item_t *item)
* Syntax : void dump_menu_item(const menuex_item_t *item)
* Input :
* Output :
* Description :
@ -622,6 +622,14 @@ static void dump_menu_item(const menu_item_t *item)
{
printf("POPUP ");
print_string(item->name);
if(item->gotid)
printf(", Id=%d", item->id);
if(item->gottype)
printf(", Type=%d", item->type);
if(item->gotstate)
printf(", State=%08x", item->state);
if(item->gothelpid)
printf(", HelpId=%d", item->helpid);
printf("\n");
dump_menu_item(item->popup);
}
@ -631,7 +639,14 @@ static void dump_menu_item(const menu_item_t *item)
if(item->name)
{
print_string(item->name);
printf(", %d, %08x", item->id, item->state);
if(item->gotid)
printf(", Id=%d", item->id);
if(item->gottype)
printf(", Type=%d", item->type);
if(item->gotstate)
printf(", State=%08x", item->state);
if(item->gothelpid)
printf(", HelpId=%d", item->helpid);
}
else
printf("SEPARATOR");
@ -659,58 +674,6 @@ static void dump_menu(const menu_t *men)
dump_menu_item(men->items);
}
/*
*****************************************************************************
* Function : dump_menuex_item
* Syntax : void dump_menuex_item(const menuex_item_t *item)
* Input :
* Output :
* Description :
* Remarks :
*****************************************************************************
*/
static void dump_menuex_item(const menuex_item_t *item)
{
while(item)
{
if(item->popup)
{
printf("POPUP ");
print_string(item->name);
if(item->gotid)
printf(", Id=%d", item->id);
if(item->gottype)
printf(", Type=%d", item->type);
if(item->gotstate)
printf(", State=%08x", item->state);
if(item->gothelpid)
printf(", HelpId=%d", item->helpid);
printf("\n");
dump_menuex_item(item->popup);
}
else
{
printf("MENUITEM ");
if(item->name)
{
print_string(item->name);
if(item->gotid)
printf(", Id=%d", item->id);
if(item->gottype)
printf(", Type=%d", item->type);
if(item->gotstate)
printf(", State=%08x", item->state);
if(item->gothelpid)
printf(", HelpId=%d", item->helpid);
}
else
printf("SEPARATOR");
printf("\n");
}
item = item->next;
}
}
/*
*****************************************************************************
* Function : dump_menuex
@ -726,7 +689,7 @@ static void dump_menuex(const menuex_t *menex)
{
dump_memopt(menex->memopt);
dump_lvc(&(menex->lvc));
dump_menuex_item(menex->items);
dump_menu_item(menex->items);
}
/*

View file

@ -819,9 +819,9 @@ static res_t *menu2res(name_id_t *name, menu_t *men)
* Remarks : Self recursive
*****************************************************************************
*/
static void menuexitem2res(res_t *res, menuex_item_t *menitem, const language_t *lang)
static void menuexitem2res(res_t *res, menu_item_t *menitem, const language_t *lang)
{
menuex_item_t *itm = menitem;
menu_item_t *itm = menitem;
assert(win32 != 0);
while(itm)
{

View file

@ -51,7 +51,6 @@ __NEW_STRUCT_FUNC(name_id)
__NEW_STRUCT_FUNC(menu)
__NEW_STRUCT_FUNC(menuex)
__NEW_STRUCT_FUNC(menu_item)
__NEW_STRUCT_FUNC(menuex_item)
__NEW_STRUCT_FUNC(control)
__NEW_STRUCT_FUNC(icon)
__NEW_STRUCT_FUNC(cursor)

View file

@ -38,7 +38,6 @@ __NEW_STRUCT_PROTO(name_id);
__NEW_STRUCT_PROTO(menu);
__NEW_STRUCT_PROTO(menuex);
__NEW_STRUCT_PROTO(menu_item);
__NEW_STRUCT_PROTO(menuex_item);
__NEW_STRUCT_PROTO(control);
__NEW_STRUCT_PROTO(icon);
__NEW_STRUCT_PROTO(cursor);

View file

@ -192,7 +192,6 @@ static control_t *get_control_head(control_t *p);
static ver_value_t *get_ver_value_head(ver_value_t *p);
static ver_block_t *get_ver_block_head(ver_block_t *p);
static resource_t *get_resource_head(resource_t *p);
static menuex_item_t *get_itemex_head(menuex_item_t *p);
static menu_item_t *get_item_head(menu_item_t *p);
static raw_data_t *merge_raw_data_str(raw_data_t *r1, string_t *str);
static raw_data_t *merge_raw_data_int(raw_data_t *r1, int i);
@ -254,7 +253,6 @@ static int rsrcid_to_token(int lookahead);
characts_t *chars;
event_t *event;
menu_item_t *menitm;
menuex_item_t *menexitm;
itemex_opt_t *exopt;
raw_data_t *raw;
lvc_t *lvc;
@ -318,9 +316,8 @@ static int rsrcid_to_token(int lookahead);
%type <blk> ver_blocks ver_block
%type <val> ver_values ver_value
%type <men> menu
%type <menitm> item_definitions menu_body
%type <menitm> item_definitions menu_body itemex_definitions menuex_body
%type <menex> menuex
%type <menexitm> itemex_definitions menuex_body
%type <exopt> itemex_p_options itemex_options
%type <msg> messagetable
%type <usr> userres
@ -1306,7 +1303,7 @@ menuex : tMENUEX loadmemopts opt_lvc menuex_body {
}
else
$$->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE | WRC_MO_DISCARDABLE;
$$->items = get_itemex_head($4);
$$->items = get_item_head($4);
if($3)
{
$$->lvc = *($3);
@ -1324,7 +1321,7 @@ menuex_body
itemex_definitions
: /* Empty */ {$$ = NULL; }
| itemex_definitions tMENUITEM tSTRING itemex_options {
$$ = new_menuex_item();
$$ = new_menu_item();
$$->prev = $1;
if($1)
$1->next = $$;
@ -1340,17 +1337,17 @@ itemex_definitions
free($4);
}
| itemex_definitions tMENUITEM tSEPARATOR {
$$ = new_menuex_item();
$$ = new_menu_item();
$$->prev = $1;
if($1)
$1->next = $$;
}
| itemex_definitions tPOPUP tSTRING itemex_p_options menuex_body {
$$ = new_menuex_item();
$$ = new_menu_item();
$$->prev = $1;
if($1)
$1->next = $$;
$$->popup = get_itemex_head($5);
$$->popup = get_item_head($5);
$$->name = $3;
$$->id = $4->id;
$$->type = $4->type;
@ -2414,15 +2411,6 @@ static menu_item_t *get_item_head(menu_item_t *p)
return p;
}
static menuex_item_t *get_itemex_head(menuex_item_t *p)
{
if(!p)
return NULL;
while(p->prev)
p = p->prev;
return p;
}
static resource_t *get_resource_head(resource_t *p)
{
if(!p)

View file

@ -447,13 +447,67 @@ static int compare_icon_group(icon_group_t *icon_group1, icon_group_t *icon_grou
static int compare_menu_item(menu_item_t *menu_item1, menu_item_t *menu_item2) {
int different = 0;
while(!different && menu_item1 && menu_item2) {
if(menu_item1->popup && menu_item2->popup)
different = compare_menu_item(menu_item1->popup, menu_item2->popup);
else if(!menu_item1->popup && !menu_item2->popup) {
if(menu_item1->name && menu_item2->name) {
if((menu_item1->id != menu_item2->id) ||
(menu_item1->state != menu_item2->state))
if(menu_item1->popup && menu_item2->popup) {
if(!different && menu_item1->gotid && menu_item2->gotid) {
if(menu_item1->id != menu_item2->id)
different = 1;
} else if(!different &&
((menu_item1->gotid && !menu_item2->gotid) ||
(!menu_item1->gotid && menu_item2->gotid)))
different = 1;
if(!different && menu_item1->gottype && menu_item2->gottype) {
if(menu_item1->type != menu_item2->type)
different = 1;
} else if(!different &&
((menu_item1->gottype && !menu_item2->gottype) ||
(!menu_item1->gottype && menu_item2->gottype)))
different = 1;
if(!different && menu_item1->gotstate && menu_item2->gotstate) {
if(menu_item1->state != menu_item2->state)
different = 1;
} else if(!different &&
((menu_item1->gotstate && !menu_item2->gotstate) ||
(!menu_item1->gotstate && menu_item2->gotstate)))
different = 1;
if(!different && menu_item1->gothelpid && menu_item2->gothelpid) {
if(menu_item1->helpid != menu_item2->helpid)
different = 1;
} else if(!different &&
((menu_item1->gothelpid && !menu_item2->gothelpid) ||
(!menu_item1->gothelpid && menu_item2->gothelpid)))
different = 1;
if(!different)
different = compare_menu_item(menu_item1->popup, menu_item2->popup);
} else if(!menu_item1->popup && !menu_item2->popup) {
if(menu_item1->name && menu_item2->name) {
if(!different && menu_item1->gotid && menu_item2->gotid) {
if(menu_item1->id != menu_item2->id)
different = 1;
} else if(!different &&
((menu_item1->gotid && !menu_item2->gotid) ||
(!menu_item1->gotid && menu_item2->gotid)))
different = 1;
if(!different && menu_item1->gottype && menu_item2->gottype) {
if(menu_item1->type != menu_item2->type)
different = 1;
} else if(!different &&
((menu_item1->gottype && !menu_item2->gottype) ||
(!menu_item1->gottype && menu_item2->gottype)))
different = 1;
if(!different && menu_item1->gotstate && menu_item2->gotstate) {
if(menu_item1->state != menu_item2->state)
different = 1;
} else if(!different &&
((menu_item1->gotstate && !menu_item2->gotstate) ||
(!menu_item1->gotstate && menu_item2->gotstate)))
different = 1;
if(!different && menu_item1->gothelpid && menu_item2->gothelpid) {
if(menu_item1->helpid != menu_item2->helpid)
different = 1;
} else if(!different &&
((menu_item1->gothelpid && !menu_item2->gothelpid) ||
(!menu_item1->gothelpid && menu_item2->gothelpid)))
different = 1;
} else if((menu_item1->name && !menu_item2->name) ||
(!menu_item1->name && menu_item2->name))
different = 1;
@ -481,85 +535,6 @@ static int compare_menu(menu_t *menu1, menu_t *menu2) {
return different;
}
static int compare_menuex_item(menuex_item_t *menuex_item1, menuex_item_t *menuex_item2) {
int different = 0;
while(!different && menuex_item1 && menuex_item2) {
if(menuex_item1->popup && menuex_item2->popup) {
if(!different && menuex_item1->gotid && menuex_item2->gotid) {
if(menuex_item1->id != menuex_item2->id)
different = 1;
} else if(!different &&
((menuex_item1->gotid && !menuex_item2->gotid) ||
(!menuex_item1->gotid && menuex_item2->gotid)))
different = 1;
if(!different && menuex_item1->gottype && menuex_item2->gottype) {
if(menuex_item1->type != menuex_item2->type)
different = 1;
} else if(!different &&
((menuex_item1->gottype && !menuex_item2->gottype) ||
(!menuex_item1->gottype && menuex_item2->gottype)))
different = 1;
if(!different && menuex_item1->gotstate && menuex_item2->gotstate) {
if(menuex_item1->state != menuex_item2->state)
different = 1;
} else if(!different &&
((menuex_item1->gotstate && !menuex_item2->gotstate) ||
(!menuex_item1->gotstate && menuex_item2->gotstate)))
different = 1;
if(!different && menuex_item1->gothelpid && menuex_item2->gothelpid) {
if(menuex_item1->helpid != menuex_item2->helpid)
different = 1;
} else if(!different &&
((menuex_item1->gothelpid && !menuex_item2->gothelpid) ||
(!menuex_item1->gothelpid && menuex_item2->gothelpid)))
different = 1;
if(!different)
different = compare_menuex_item(menuex_item1->popup, menuex_item2->popup);
} else if(!menuex_item1->popup && !menuex_item2->popup) {
if(menuex_item1->name && menuex_item2->name) {
if(!different && menuex_item1->gotid && menuex_item2->gotid) {
if(menuex_item1->id != menuex_item2->id)
different = 1;
} else if(!different &&
((menuex_item1->gotid && !menuex_item2->gotid) ||
(!menuex_item1->gotid && menuex_item2->gotid)))
different = 1;
if(!different && menuex_item1->gottype && menuex_item2->gottype) {
if(menuex_item1->type != menuex_item2->type)
different = 1;
} else if(!different &&
((menuex_item1->gottype && !menuex_item2->gottype) ||
(!menuex_item1->gottype && menuex_item2->gottype)))
different = 1;
if(!different && menuex_item1->gotstate && menuex_item2->gotstate) {
if(menuex_item1->state != menuex_item2->state)
different = 1;
} else if(!different &&
((menuex_item1->gotstate && !menuex_item2->gotstate) ||
(!menuex_item1->gotstate && menuex_item2->gotstate)))
different = 1;
if(!different && menuex_item1->gothelpid && menuex_item2->gothelpid) {
if(menuex_item1->helpid != menuex_item2->helpid)
different = 1;
} else if(!different &&
((menuex_item1->gothelpid && !menuex_item2->gothelpid) ||
(!menuex_item1->gothelpid && menuex_item2->gothelpid)))
different = 1;
} else if((menuex_item1->name && !menuex_item2->name) ||
(!menuex_item1->name && menuex_item2->name))
different = 1;
} else
different = 1;
menuex_item1 = menuex_item1->next;
menuex_item2 = menuex_item2->next;
}
if(!different &&
((menuex_item1 && !menuex_item2) ||
(!menuex_item1 && menuex_item2)))
different = 1;
return different;
}
static int compare_menuex(menuex_t *menuex1, menuex_t *menuex2) {
int different = 0;
if(!different &&
@ -568,7 +543,7 @@ static int compare_menuex(menuex_t *menuex1, menuex_t *menuex2) {
(menuex1->lvc.characts != menuex2->lvc.characts)))
different = 1;
if(!different)
different = compare_menuex_item(menuex1->items, menuex2->items);
different = compare_menu_item(menuex1->items, menuex2->items);
return different;
}

View file

@ -241,22 +241,6 @@ typedef struct menu_item {
struct menu_item *prev;
struct menu_item *popup;
int id;
DWORD state;
string_t *name;
} menu_item_t;
typedef struct menu {
DWORD memopt;
lvc_t lvc;
menu_item_t *items;
} menu_t;
/* MenuEx structures */
typedef struct menuex_item {
struct menuex_item *next;
struct menuex_item *prev;
struct menuex_item *popup;
int id;
DWORD type;
DWORD state;
int helpid;
@ -265,12 +249,18 @@ typedef struct menuex_item {
int gottype;
int gotstate;
int gothelpid;
} menuex_item_t;
} menu_item_t;
typedef struct menu {
DWORD memopt;
lvc_t lvc;
menu_item_t *items;
} menu_t;
typedef struct menuex {
DWORD memopt;
lvc_t lvc;
menuex_item_t *items;
menu_item_t *items;
} menuex_t;
typedef struct itemex_opt