additional patchgui height icons, perspective test for zero area, es.po update
[goodguy/cinelerra.git] / cinelerra-5.1 / guicast / bcmenuitem.C
index 1e9399b1396c62ad55f3d08f0e3cad85c4a51f9a..6ec65a93599c108340b660164e0a6ceb4c80dafe 100644 (file)
@@ -61,6 +61,7 @@ BC_MenuItem::BC_MenuItem(const char *text, const char *hotkey_text, int hotkey)
        alt_hotkey = 0;
        ctrl_hotkey = 0;
        menu_popup = 0;
+       enabled = 1;
 }
 
 BC_MenuItem::~BC_MenuItem()
@@ -135,6 +136,16 @@ int BC_MenuItem::deactivate_submenus(BC_MenuPopup *exclude)
        return 0;
 }
 
+int BC_MenuItem::get_enabled()
+{
+       return enabled;
+}
+void BC_MenuItem::set_enabled(int v)
+{
+       enabled = v;
+}
+
+
 int BC_MenuItem::activate_submenu()
 {
        int new_x, new_y;
@@ -150,7 +161,7 @@ int BC_MenuItem::activate_submenu()
                        &new_y,
                        &tempwin);
                submenu->popup_menu = menu_popup->popup_menu;
-               submenu->activate_menu(new_x + 5, new_y, menu_popup->w - 10, h, 0, 0);
+               submenu->activate_menu(new_x + xS(5), new_y, menu_popup->w - xS(10), h, 0, 0);
                highlighted = 1;
        }
        return 0;
@@ -190,10 +201,10 @@ int BC_MenuItem::dispatch_button_press()
 
 int BC_MenuItem::dispatch_button_release(int &redraw)
 {
-       int result = 0;
-
-       if(!strcmp(text, "-")) return 0;
+       int len = strlen(text);
+       if( len > 0 && text[0] == '-' && text[len-1] == '-' ) return 0;
 
+       int result = 0;
        if(submenu)
        {
                result = submenu->dispatch_button_release();
@@ -308,16 +319,15 @@ int BC_MenuItem::draw()
        int text_line = top_level->get_text_descent(MEDIUMFONT);
        BC_Resources *resources = top_level->get_resources();
 
-       if(!strcmp(text, "-"))
-       {
-               menu_popup->get_popup()->set_color(DKGREY);
-               menu_popup->get_popup()->draw_line(5, y + h / 2, menu_popup->get_w() - 5, y + h / 2);
-               menu_popup->get_popup()->set_color(LTGREY);
-               menu_popup->get_popup()->draw_line(5, y + h / 2 + 1, menu_popup->get_w() - 5, y + h / 2 + 1);
+       if(!strcmp(text, "-")) {
+               int bx = xS(5), by = y+h/2, bw = menu_popup->get_w()-xS(10);
+               draw_bar(bx, by, bw);
        }
-       else
-       {
-               int offset = 0;
+       else if( text[0] == '-' && text[strlen(text)-1] == '-' ) {
+               draw_title_bar();
+       }
+       else {
+               int xoffset = 0, yoffset = 0;
                if(highlighted)
                {
                        int y = this->y;
@@ -351,7 +361,7 @@ int BC_MenuItem::draw()
                                                resources->menu_down,
                                                resources->menu_light);
                                }
-                               offset = 1;
+                               xoffset = xS(1);  yoffset = yS(1);
                        }
                        else
 // Highlighted
@@ -385,28 +395,55 @@ int BC_MenuItem::draw()
                  }
                if(checked)
                {
-//                     menu_popup->get_popup()->draw_check(10 + offset, y + 2 + offset);
+//                     menu_popup->get_popup()->draw_check(xS(10) + xoffset, y + 2 + yoffset);
                        menu_popup->get_popup()->draw_pixmap(menu_popup->check,
-                               offset,
-                               y + (this->h - menu_popup->check->get_h()) / 2 + offset);
+                               xoffset,
+                               y + (this->h - menu_popup->check->get_h()) / 2 + yoffset);
                        menu_popup->get_popup()->set_font(MEDIUMFONT);
-                       menu_popup->get_popup()->draw_text(menu_popup->check->get_w() + offset,
-                               y + h - text_line - 2 + offset,
+                       menu_popup->get_popup()->draw_text(menu_popup->check->get_w() + xoffset,
+                               y + h - text_line - 2 + yoffset,
                                text);
-                       menu_popup->get_popup()->draw_text(menu_popup->get_key_x() + offset,
-                               y + h - text_line - 2 + offset,
+                       menu_popup->get_popup()->draw_text(menu_popup->get_key_x() + xoffset,
+                               y + h - text_line - 2 + yoffset,
                                hotkey_text);
                }
                else
                {
                        menu_popup->get_popup()->set_font(MEDIUMFONT);
-                       menu_popup->get_popup()->draw_text(10 + offset, y + h - text_line - 2 + offset, text);
-                       menu_popup->get_popup()->draw_text(menu_popup->get_key_x() + offset, y + h - text_line - 2 + offset, hotkey_text);
+                       menu_popup->get_popup()->draw_text(xS(10) + xoffset, y + h - text_line - 2 + yoffset, text);
+                       menu_popup->get_popup()->draw_text(menu_popup->get_key_x() + xoffset, y + h - text_line - 2 + yoffset, hotkey_text);
                }
        }
        return 0;
 }
 
+void BC_MenuItem::draw_bar(int bx, int by, int bw)
+{
+       BC_Popup *popup = menu_popup->get_popup();
+       popup->set_color(DKGREY);
+       popup->draw_line(bx, by, bx+bw, by);
+       popup->set_color(LTGREY);  ++by;
+       popup->draw_line(bx, by, bx+bw, by);
+}
+
+void BC_MenuItem::draw_title_bar()
+{
+       BC_Popup *popup = menu_popup->get_popup();
+       int len = strlen(text)-2;
+       if( len <= 0 ) return;
+       int tw = popup->get_text_width(MEDIUMFONT, text+1, len);
+       int th = popup->get_text_ascent(MEDIUMFONT);
+       int mw = menu_popup->get_w(), lw = mw - tw;
+       int x1 = xS(5), y1 = y+h/2;
+       int tx = lw/4, ty = y1 + th/2;
+       int w1 = tx - x1 - xS(5);
+       if( w1 > 0 ) draw_bar(x1, y1, w1);
+       BC_Resources *resources = top_level->get_resources();
+       popup->set_color(resources->text_background_hi);
+       popup->draw_text(tx, ty, text+1, len);
+       int x2 = tx + tw + xS(5), w2 = mw - xS(5) - x2;
+       if( w2 > 0 ) draw_bar(x2, y1, w2);
+}
 
 int BC_MenuItem::add_submenu(BC_SubMenu *submenu)
 {