oops - now add termux/android DV patch
[goodguy/cinelerra.git] / cinelerra-5.1 / guicast / bcmenupopup.C
index c47e699a4be00cb8fe89bb555231568271605bb7..c35b2fa5a60c44750ae4dc120a76be5cb11cca56 100644 (file)
@@ -144,14 +144,16 @@ int BC_MenuPopup::total_items()
        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();
        }
@@ -163,9 +165,10 @@ int BC_MenuPopup::dispatch_button_release()
        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();
        }
@@ -175,9 +178,10 @@ int BC_MenuPopup::dispatch_button_release()
 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;
 }
@@ -189,9 +193,10 @@ int BC_MenuPopup::dispatch_motion_event()
        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();
@@ -221,9 +226,10 @@ int BC_MenuPopup::dispatch_translation_event()
                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;
@@ -236,9 +242,10 @@ int BC_MenuPopup::dispatch_cursor_leave()
 
        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();
        }
@@ -289,7 +296,7 @@ int BC_MenuPopup::activate_menu(int x,
                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
        {
@@ -300,7 +307,7 @@ int BC_MenuPopup::activate_menu(int x,
                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;
 
@@ -308,16 +315,12 @@ int BC_MenuPopup::activate_menu(int x,
        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();
@@ -327,9 +330,10 @@ int BC_MenuPopup::activate_menu(int x,
 
 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;
 }
@@ -365,9 +369,10 @@ int BC_MenuPopup::draw_items()
                        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();
 
@@ -377,42 +382,44 @@ int BC_MenuPopup::draw_items()
 
 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 + 10;
+       w = widest_text + widest_key + xs20;
 
        w = MAX(w, top_level->get_resources()->min_menu_w);
 // pad for division
-       key_x = widest_text + 5;
+       key_x = widest_text + xS(16);
 // pad for border
-       h += 2;
+       h += yS(2);
        return 0;
 }
 
@@ -431,8 +438,9 @@ int BC_MenuPopup::cursor_inside()
        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;
 }