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 * 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 : * Input :
* Output : * Output :
* Description : * Description :
@ -622,6 +622,14 @@ static void dump_menu_item(const menu_item_t *item)
{ {
printf("POPUP "); printf("POPUP ");
print_string(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);
printf("\n"); printf("\n");
dump_menu_item(item->popup); dump_menu_item(item->popup);
} }
@ -631,7 +639,14 @@ static void dump_menu_item(const menu_item_t *item)
if(item->name) if(item->name)
{ {
print_string(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 else
printf("SEPARATOR"); printf("SEPARATOR");
@ -659,58 +674,6 @@ static void dump_menu(const menu_t *men)
dump_menu_item(men->items); 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 * Function : dump_menuex
@ -726,7 +689,7 @@ static void dump_menuex(const menuex_t *menex)
{ {
dump_memopt(menex->memopt); dump_memopt(menex->memopt);
dump_lvc(&(menex->lvc)); 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 * 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); assert(win32 != 0);
while(itm) while(itm)
{ {

View File

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

View File

@ -38,7 +38,6 @@ __NEW_STRUCT_PROTO(name_id);
__NEW_STRUCT_PROTO(menu); __NEW_STRUCT_PROTO(menu);
__NEW_STRUCT_PROTO(menuex); __NEW_STRUCT_PROTO(menuex);
__NEW_STRUCT_PROTO(menu_item); __NEW_STRUCT_PROTO(menu_item);
__NEW_STRUCT_PROTO(menuex_item);
__NEW_STRUCT_PROTO(control); __NEW_STRUCT_PROTO(control);
__NEW_STRUCT_PROTO(icon); __NEW_STRUCT_PROTO(icon);
__NEW_STRUCT_PROTO(cursor); __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_value_t *get_ver_value_head(ver_value_t *p);
static ver_block_t *get_ver_block_head(ver_block_t *p); static ver_block_t *get_ver_block_head(ver_block_t *p);
static resource_t *get_resource_head(resource_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 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_str(raw_data_t *r1, string_t *str);
static raw_data_t *merge_raw_data_int(raw_data_t *r1, int i); 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; characts_t *chars;
event_t *event; event_t *event;
menu_item_t *menitm; menu_item_t *menitm;
menuex_item_t *menexitm;
itemex_opt_t *exopt; itemex_opt_t *exopt;
raw_data_t *raw; raw_data_t *raw;
lvc_t *lvc; lvc_t *lvc;
@ -318,9 +316,8 @@ static int rsrcid_to_token(int lookahead);
%type <blk> ver_blocks ver_block %type <blk> ver_blocks ver_block
%type <val> ver_values ver_value %type <val> ver_values ver_value
%type <men> menu %type <men> menu
%type <menitm> item_definitions menu_body %type <menitm> item_definitions menu_body itemex_definitions menuex_body
%type <menex> menuex %type <menex> menuex
%type <menexitm> itemex_definitions menuex_body
%type <exopt> itemex_p_options itemex_options %type <exopt> itemex_p_options itemex_options
%type <msg> messagetable %type <msg> messagetable
%type <usr> userres %type <usr> userres
@ -1306,7 +1303,7 @@ menuex : tMENUEX loadmemopts opt_lvc menuex_body {
} }
else else
$$->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE | WRC_MO_DISCARDABLE; $$->memopt = WRC_MO_MOVEABLE | WRC_MO_PURE | WRC_MO_DISCARDABLE;
$$->items = get_itemex_head($4); $$->items = get_item_head($4);
if($3) if($3)
{ {
$$->lvc = *($3); $$->lvc = *($3);
@ -1324,7 +1321,7 @@ menuex_body
itemex_definitions itemex_definitions
: /* Empty */ {$$ = NULL; } : /* Empty */ {$$ = NULL; }
| itemex_definitions tMENUITEM tSTRING itemex_options { | itemex_definitions tMENUITEM tSTRING itemex_options {
$$ = new_menuex_item(); $$ = new_menu_item();
$$->prev = $1; $$->prev = $1;
if($1) if($1)
$1->next = $$; $1->next = $$;
@ -1340,17 +1337,17 @@ itemex_definitions
free($4); free($4);
} }
| itemex_definitions tMENUITEM tSEPARATOR { | itemex_definitions tMENUITEM tSEPARATOR {
$$ = new_menuex_item(); $$ = new_menu_item();
$$->prev = $1; $$->prev = $1;
if($1) if($1)
$1->next = $$; $1->next = $$;
} }
| itemex_definitions tPOPUP tSTRING itemex_p_options menuex_body { | itemex_definitions tPOPUP tSTRING itemex_p_options menuex_body {
$$ = new_menuex_item(); $$ = new_menu_item();
$$->prev = $1; $$->prev = $1;
if($1) if($1)
$1->next = $$; $1->next = $$;
$$->popup = get_itemex_head($5); $$->popup = get_item_head($5);
$$->name = $3; $$->name = $3;
$$->id = $4->id; $$->id = $4->id;
$$->type = $4->type; $$->type = $4->type;
@ -2414,15 +2411,6 @@ static menu_item_t *get_item_head(menu_item_t *p)
return 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) static resource_t *get_resource_head(resource_t *p)
{ {
if(!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) { static int compare_menu_item(menu_item_t *menu_item1, menu_item_t *menu_item2) {
int different = 0; int different = 0;
while(!different && menu_item1 && menu_item2) { while(!different && menu_item1 && menu_item2) {
if(menu_item1->popup && menu_item2->popup) if(menu_item1->popup && menu_item2->popup) {
different = compare_menu_item(menu_item1->popup, menu_item2->popup); if(!different && menu_item1->gotid && menu_item2->gotid) {
else if(!menu_item1->popup && !menu_item2->popup) { if(menu_item1->id != menu_item2->id)
if(menu_item1->name && menu_item2->name) {
if((menu_item1->id != menu_item2->id) ||
(menu_item1->state != menu_item2->state))
different = 1; 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) || } else if((menu_item1->name && !menu_item2->name) ||
(!menu_item1->name && menu_item2->name)) (!menu_item1->name && menu_item2->name))
different = 1; different = 1;
@ -481,85 +535,6 @@ static int compare_menu(menu_t *menu1, menu_t *menu2) {
return different; 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) { static int compare_menuex(menuex_t *menuex1, menuex_t *menuex2) {
int different = 0; int different = 0;
if(!different && if(!different &&
@ -568,7 +543,7 @@ static int compare_menuex(menuex_t *menuex1, menuex_t *menuex2) {
(menuex1->lvc.characts != menuex2->lvc.characts))) (menuex1->lvc.characts != menuex2->lvc.characts)))
different = 1; different = 1;
if(!different) if(!different)
different = compare_menuex_item(menuex1->items, menuex2->items); different = compare_menu_item(menuex1->items, menuex2->items);
return different; return different;
} }

View File

@ -241,22 +241,6 @@ typedef struct menu_item {
struct menu_item *prev; struct menu_item *prev;
struct menu_item *popup; struct menu_item *popup;
int id; 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 type;
DWORD state; DWORD state;
int helpid; int helpid;
@ -265,12 +249,18 @@ typedef struct menuex_item {
int gottype; int gottype;
int gotstate; int gotstate;
int gothelpid; 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 { typedef struct menuex {
DWORD memopt; DWORD memopt;
lvc_t lvc; lvc_t lvc;
menuex_item_t *items; menu_item_t *items;
} menuex_t; } menuex_t;
typedef struct itemex_opt typedef struct itemex_opt