diff --git a/src/gui/widget/menue.cpp b/src/gui/widget/menue.cpp index 2a2db3bad..08fb811a0 100644 --- a/src/gui/widget/menue.cpp +++ b/src/gui/widget/menue.cpp @@ -644,6 +644,7 @@ void CMenuWidget::Init(const std::string &NameString, const std::string &Icon, c //caption and icon nameString = NameString; iconfile = Icon; + subhead_text = std::string(); //basic attributes iconOffset = 0; @@ -671,6 +672,7 @@ void CMenuWidget::Init(const std::string &NameString, const std::string &Icon, c details_line = NULL; info_box = NULL; header = NULL; + sub_header = NULL; footer = NULL; frameBuffer = CFrameBuffer::getInstance(); mglobal = CMenuGlobal::getInstance(); //create CMenuGlobal instance only here @@ -723,6 +725,11 @@ void CMenuWidget::ResetModules() delete header; header = NULL; } + if (sub_header){ + sub_header->hide(); + delete sub_header; + sub_header = NULL; + } if (details_line){ details_line->hide(); delete details_line; @@ -1168,6 +1175,8 @@ void CMenuWidget::hide() } else { if (header) header->kill(); + if (sub_header) + sub_header->kill(); if (info_box) info_box->kill(); if (details_line) @@ -1255,6 +1264,8 @@ void CMenuWidget::calcSize() initHeader(); hheight = header->getHeight(); + if (sub_header) + hheight += sub_header->getHeight(); int heightCurrPage=0; page_start.clear(); @@ -1378,6 +1389,8 @@ void CMenuWidget::paint() // paint head initHeader(); header->paint(CC_SAVE_SCREEN_NO); + if (sub_header) + sub_header->paint(CC_SAVE_SCREEN_NO); // paint body background PaintBoxRel(x, y+hheight, width + scrollbar_width, height-hheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE, @@ -1406,6 +1419,28 @@ void CMenuWidget::initHeader() header->setCaptionColor(COL_MENUHEAD_TEXT); header->enableColBodyGradient(g_settings.theme.menu_Head_gradient, COL_MENUCONTENT_PLUS_0); header->enableGradientBgCleanUp(savescreen); + + if (!subhead_text.empty()) + initSubHeader(); + else + if (sub_header){ + delete sub_header; + sub_header = NULL; + } +} + +void CMenuWidget::initSubHeader() +{ + if (!sub_header){ + sub_header = new CComponentsHeader(x, y + header->getHeight(), header->getWidth(), 0, CComponentsHeader::CC_HEADER_SIZE_SMALL, subhead_text); + sub_header->enableShadow(CC_SHADOW_RIGHT | CC_SHADOW_CORNER_TOP_RIGHT | CC_SHADOW_CORNER_BOTTOM_RIGHT); + sub_header->setOffset(OFFSET_INNER_MID); + sub_header->setCorner(CORNER_NONE); + } + sub_header->setWidth(header->getWidth()); + sub_header->setCaption(subhead_text); + sub_header->setColorAll(COL_FRAME_PLUS_0, g_settings.theme.menu_Head_gradient ? COL_MENUCONTENT_PLUS_0 : COL_MENUHEAD_PLUS_0, COL_SHADOW_PLUS_0); + sub_header->setCaptionColor(COL_MENUHEAD_TEXT); } void CMenuWidget::setMenuPos(const int& menu_width) @@ -1507,8 +1542,7 @@ void CMenuWidget::addIntroItems(const std::string& s_subhead_text, neutrino_loca { brief_hints = brief_hint; - if (!s_subhead_text.empty()) - addItem(new CMenuSeparator(CMenuSeparator::ALIGN_LEFT | CMenuSeparator::SUB_HEAD | CMenuSeparator::STRING, s_subhead_text)); + subhead_text = s_subhead_text; addItem(GenericMenuSeparator); @@ -2439,17 +2473,6 @@ int CMenuSeparator::paint(bool selected) { height = getHeight(); CFrameBuffer * frameBuffer = CFrameBuffer::getInstance(); - - if ((type & SUB_HEAD)) - { - item_color = COL_MENUHEAD_TEXT; - item_bgcolor = g_settings.theme.menu_Head_gradient ? COL_MENUCONTENT_PLUS_0 : COL_MENUHEAD_PLUS_0; - } - else - { - item_color = COL_MENUCONTENTINACTIVE_TEXT; - item_bgcolor = COL_MENUCONTENT_PLUS_0; - } frameBuffer->paintBoxRel(x, y, dx, height, item_bgcolor); if ((type & LINE)) @@ -2469,7 +2492,7 @@ int CMenuSeparator::paint(bool selected) /* if no alignment is specified, align centered */ if (type & ALIGN_LEFT) - name_start_x = x + (!(type & SUB_HEAD) ? name_start_x : 2*OFFSET_INNER_MID + iconwidth); + name_start_x = x + (2*OFFSET_INNER_MID + iconwidth); else if (type & ALIGN_RIGHT) name_start_x = x + dx - stringwidth - 2*OFFSET_INNER_MID; else /* ALIGN_CENTER */ diff --git a/src/gui/widget/menue.h b/src/gui/widget/menue.h index f364456cc..3fa18cd4c 100644 --- a/src/gui/widget/menue.h +++ b/src/gui/widget/menue.h @@ -230,7 +230,7 @@ class CMenuSeparator : public CMenuItem ALIGN_CENTER = 4, ALIGN_LEFT = 8, ALIGN_RIGHT = 16, - SUB_HEAD = 32 + SUB_HEAD = 0 //32 deprecated and invalid, only here for compatibility //TODO: remove global }; @@ -552,8 +552,9 @@ class CMenuWidget : public CMenuTarget, public CComponentsSignals CComponentsDetailsLine *details_line; CComponentsInfoBox *info_box; int hint_height; - CComponentsHeader *header; + CComponentsHeader *header, *sub_header; CComponentsFooter *footer; + std::string subhead_text; unsigned int saveScreen_width ; unsigned int saveScreen_height; unsigned int saveScreen_y; @@ -609,6 +610,7 @@ class CMenuWidget : public CMenuTarget, public CComponentsSignals void restoreScreen(); void setMenuPos(const int& menu_width); void initHeader(); + void initSubHeader(); public: CMenuWidget();