CMenueWidget: use native header as sub header

This commit is contained in:
2019-04-02 16:34:56 +02:00
parent 1c574e4a07
commit 3f84d53b05
2 changed files with 41 additions and 16 deletions

View File

@@ -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 */

View File

@@ -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();