return menu_items.size();
}
+
int BC_MenuPopup::dispatch_button_press()
{
int result = 0;
if(popup)
{
- for(int i = 0; i < menu_items.total && !result && popup; i++)
- {
- result = menu_items.values[i]->dispatch_button_press();
+ for(int i = 0; i < menu_items.total && !result && popup; i++) {
+ BC_MenuItem *item = menu_items[i];
+ if( !item->enabled ) continue;
+ result = item->dispatch_button_press();
}
if(result) draw_items();
}
int result = 0, redraw = 0;
if(popup)
{
- for(int i = 0; i < menu_items.total && !result && popup; i++)
- {
- result = menu_items.values[i]->dispatch_button_release(redraw);
+ for(int i = 0; i < menu_items.total && !result && popup; i++) {
+ BC_MenuItem *item = menu_items[i];
+ if( !item->enabled ) continue;
+ result = item->dispatch_button_release(redraw);
}
if(redraw) draw_items();
}
int BC_MenuPopup::dispatch_key_press()
{
int result = 0;
- for(int i = 0; i < menu_items.total && !result; i++)
- {
- result = menu_items.values[i]->dispatch_key_press();
+ for(int i = 0; i < menu_items.total && !result; i++) {
+ BC_MenuItem *item = menu_items[i];
+ if( !item->enabled ) continue;
+ result = item->dispatch_key_press();
}
return result;
}
if(popup)
{
// Try submenus and items
- for(i = 0; i < menu_items.total; i++)
- {
- result |= menu_items.values[i]->dispatch_motion_event(redraw);
+ for(i = 0; i < menu_items.total; i++) {
+ BC_MenuItem *item = menu_items[i];
+ if( !item->enabled ) continue;
+ result |= item->dispatch_motion_event(redraw);
}
if(redraw) draw_items();
this->x = new_x;
this->y = new_y;
- for(int i = 0; i < menu_items.total; i++)
- {
- menu_items.values[i]->dispatch_translation_event();
+ for(int i = 0; i < menu_items.total; i++) {
+ BC_MenuItem *item = menu_items[i];
+ if( !item->enabled ) continue;
+ item->dispatch_translation_event();
}
}
return 0;
if(popup)
{
- for(int i = 0; i < menu_items.total; i++)
- {
- result |= menu_items.values[i]->dispatch_cursor_leave();
+ for(int i = 0; i < menu_items.total; i++) {
+ BC_MenuItem *item = menu_items[i];
+ if( !item->enabled ) continue;
+ result |= item->dispatch_cursor_leave();
}
if(result) draw_items();
}
if(this->y + this->h > top_y1) this->y -= this->h + h; // Bottom justify
// Avoid top of menu going out of screen
if(this->y < 0)
- this->y = 2;
+ this->y = yS(2);
}
else
{
if(this->x + this->w > top_x1) this->x = new_x - this->w;
if(this->y + this->h > top_y1) this->y = new_y + h - this->h;
}
- top_x0 += 2; top_y0 += 2;
+ top_x0 += xS(2); top_y0 += yS(2);
if( this->x < top_x0 ) this->x = top_x0;
if( this->y < top_y0 ) this->y = top_y0;
if(menu_bar)
{
popup = new BC_Popup(menu_bar, this->x, this->y, this->w, this->h,
- top_level->get_resources()->menu_up,
- 1,
- menu_bar->bg_pixmap);
+ top_level->get_resources()->menu_up, 1, menu_bar->bg_pixmap);
}
else
{
popup = new BC_Popup(top_level, this->x, this->y, this->w, this->h,
- top_level->get_resources()->menu_up,
- 1,
- 0);
+ top_level->get_resources()->menu_up, 1, 0);
// popup->set_background(top_level->get_resources()->menu_bg);
}
draw_items();
int BC_MenuPopup::deactivate_submenus(BC_MenuPopup *exclude)
{
- for(int i = 0; i < menu_items.total; i++)
- {
- menu_items.values[i]->deactivate_submenus(exclude);
+ for(int i = 0; i < menu_items.total; i++) {
+ BC_MenuItem *item = menu_items[i];
+ if( !item->enabled ) continue;
+ item->deactivate_submenus(exclude);
}
return 0;
}
BLACK);
}
- for(int i = 0; i < menu_items.total; i++)
- {
- menu_items.values[i]->draw();
+ for(int i = 0; i < menu_items.total; i++) {
+ BC_MenuItem *item = menu_items[i];
+ if( !item->enabled ) continue;
+ item->draw();
}
popup->flash();
int BC_MenuPopup::get_dimensions()
{
- int widest_text = 10, widest_key = 10;
+ int xs10 = xS(10), xs20 = xS(20);
+ int ys4 = yS(4), ys5 = yS(10);
+ int widest_text = xs10, widest_key = xs10;
int text_w, key_w;
int i = 0;
// pad for border
- h = 2;
+ h = yS(2);
// Set up parameters in each item and get total h.
- for(i = 0; i < menu_items.total; i++)
- {
- text_w = 10 + top_level->get_text_width(MEDIUMFONT, menu_items.values[i]->text);
- if(menu_items.values[i]->checked) text_w += check->get_w() + 1;
+ for(i = 0; i < menu_items.total; i++) {
+ BC_MenuItem *item = menu_items[i];
+ if( !item->enabled ) continue;
+ text_w = xs10 + top_level->get_text_width(MEDIUMFONT, item->text);
+ if(item->checked) text_w += check->get_w() + xS(1);
- key_w = 10 + top_level->get_text_width(MEDIUMFONT, menu_items.values[i]->hotkey_text);
+ key_w = xs10 + top_level->get_text_width(MEDIUMFONT, item->hotkey_text);
if(text_w > widest_text) widest_text = text_w;
if(key_w > widest_key) widest_key = key_w;
- if(!strcmp(menu_items.values[i]->text, "-"))
- menu_items.values[i]->h = 5;
- else
- {
- menu_items.values[i]->h = item_bg[0] ? item_bg[0]->get_h() :
- top_level->get_text_height(MEDIUMFONT) + 4;
+ if(!strcmp(item->text, "-"))
+ item->h = ys5;
+ else {
+ item->h = item_bg[0] ? item_bg[0]->get_h() :
+ top_level->get_text_height(MEDIUMFONT) + ys4;
}
- menu_items.values[i]->y = h;
- menu_items.values[i]->highlighted = 0;
- menu_items.values[i]->down = 0;
- h += menu_items.values[i]->h;
+ item->y = h;
+ item->highlighted = 0;
+ item->down = 0;
+ h += item->h;
}
- w = widest_text + widest_key + 20;
+ w = widest_text + widest_key + xs20;
w = MAX(w, top_level->get_resources()->min_menu_w);
// pad for division
- key_x = widest_text + 16;
+ key_x = widest_text + xS(16);
// pad for border
- h += 2;
+ h += yS(2);
return 0;
}
if( !popup ) return 0;
if( popup->cursor_above() ) return 1;
for( int i=0; i<menu_items.size(); ++i ) {
- if( !menu_items[i]->submenu ) continue;
- if( menu_items[i]->submenu->cursor_inside() ) return 1;
+ BC_MenuItem *item = menu_items[i];
+ if( !item->enabled || !item->submenu ) continue;
+ if( item->submenu->cursor_inside() ) return 1;
}
return 0;
}