mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-26 23:13:13 +02:00
CMenueWidget: use native header as sub header
This commit is contained in:
@@ -644,6 +644,7 @@ void CMenuWidget::Init(const std::string &NameString, const std::string &Icon, c
|
|||||||
//caption and icon
|
//caption and icon
|
||||||
nameString = NameString;
|
nameString = NameString;
|
||||||
iconfile = Icon;
|
iconfile = Icon;
|
||||||
|
subhead_text = std::string();
|
||||||
|
|
||||||
//basic attributes
|
//basic attributes
|
||||||
iconOffset = 0;
|
iconOffset = 0;
|
||||||
@@ -671,6 +672,7 @@ void CMenuWidget::Init(const std::string &NameString, const std::string &Icon, c
|
|||||||
details_line = NULL;
|
details_line = NULL;
|
||||||
info_box = NULL;
|
info_box = NULL;
|
||||||
header = NULL;
|
header = NULL;
|
||||||
|
sub_header = NULL;
|
||||||
footer = NULL;
|
footer = NULL;
|
||||||
frameBuffer = CFrameBuffer::getInstance();
|
frameBuffer = CFrameBuffer::getInstance();
|
||||||
mglobal = CMenuGlobal::getInstance(); //create CMenuGlobal instance only here
|
mglobal = CMenuGlobal::getInstance(); //create CMenuGlobal instance only here
|
||||||
@@ -723,6 +725,11 @@ void CMenuWidget::ResetModules()
|
|||||||
delete header;
|
delete header;
|
||||||
header = NULL;
|
header = NULL;
|
||||||
}
|
}
|
||||||
|
if (sub_header){
|
||||||
|
sub_header->hide();
|
||||||
|
delete sub_header;
|
||||||
|
sub_header = NULL;
|
||||||
|
}
|
||||||
if (details_line){
|
if (details_line){
|
||||||
details_line->hide();
|
details_line->hide();
|
||||||
delete details_line;
|
delete details_line;
|
||||||
@@ -1168,6 +1175,8 @@ void CMenuWidget::hide()
|
|||||||
} else {
|
} else {
|
||||||
if (header)
|
if (header)
|
||||||
header->kill();
|
header->kill();
|
||||||
|
if (sub_header)
|
||||||
|
sub_header->kill();
|
||||||
if (info_box)
|
if (info_box)
|
||||||
info_box->kill();
|
info_box->kill();
|
||||||
if (details_line)
|
if (details_line)
|
||||||
@@ -1255,6 +1264,8 @@ void CMenuWidget::calcSize()
|
|||||||
|
|
||||||
initHeader();
|
initHeader();
|
||||||
hheight = header->getHeight();
|
hheight = header->getHeight();
|
||||||
|
if (sub_header)
|
||||||
|
hheight += sub_header->getHeight();
|
||||||
|
|
||||||
int heightCurrPage=0;
|
int heightCurrPage=0;
|
||||||
page_start.clear();
|
page_start.clear();
|
||||||
@@ -1378,6 +1389,8 @@ void CMenuWidget::paint()
|
|||||||
// paint head
|
// paint head
|
||||||
initHeader();
|
initHeader();
|
||||||
header->paint(CC_SAVE_SCREEN_NO);
|
header->paint(CC_SAVE_SCREEN_NO);
|
||||||
|
if (sub_header)
|
||||||
|
sub_header->paint(CC_SAVE_SCREEN_NO);
|
||||||
|
|
||||||
// paint body background
|
// paint body background
|
||||||
PaintBoxRel(x, y+hheight, width + scrollbar_width, height-hheight, COL_MENUCONTENT_PLUS_0, RADIUS_LARGE,
|
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->setCaptionColor(COL_MENUHEAD_TEXT);
|
||||||
header->enableColBodyGradient(g_settings.theme.menu_Head_gradient, COL_MENUCONTENT_PLUS_0);
|
header->enableColBodyGradient(g_settings.theme.menu_Head_gradient, COL_MENUCONTENT_PLUS_0);
|
||||||
header->enableGradientBgCleanUp(savescreen);
|
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)
|
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;
|
brief_hints = brief_hint;
|
||||||
|
|
||||||
if (!s_subhead_text.empty())
|
subhead_text = s_subhead_text;
|
||||||
addItem(new CMenuSeparator(CMenuSeparator::ALIGN_LEFT | CMenuSeparator::SUB_HEAD | CMenuSeparator::STRING, s_subhead_text));
|
|
||||||
|
|
||||||
addItem(GenericMenuSeparator);
|
addItem(GenericMenuSeparator);
|
||||||
|
|
||||||
@@ -2439,17 +2473,6 @@ int CMenuSeparator::paint(bool selected)
|
|||||||
{
|
{
|
||||||
height = getHeight();
|
height = getHeight();
|
||||||
CFrameBuffer * frameBuffer = CFrameBuffer::getInstance();
|
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);
|
frameBuffer->paintBoxRel(x, y, dx, height, item_bgcolor);
|
||||||
if ((type & LINE))
|
if ((type & LINE))
|
||||||
@@ -2469,7 +2492,7 @@ int CMenuSeparator::paint(bool selected)
|
|||||||
|
|
||||||
/* if no alignment is specified, align centered */
|
/* if no alignment is specified, align centered */
|
||||||
if (type & ALIGN_LEFT)
|
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)
|
else if (type & ALIGN_RIGHT)
|
||||||
name_start_x = x + dx - stringwidth - 2*OFFSET_INNER_MID;
|
name_start_x = x + dx - stringwidth - 2*OFFSET_INNER_MID;
|
||||||
else /* ALIGN_CENTER */
|
else /* ALIGN_CENTER */
|
||||||
|
@@ -230,7 +230,7 @@ class CMenuSeparator : public CMenuItem
|
|||||||
ALIGN_CENTER = 4,
|
ALIGN_CENTER = 4,
|
||||||
ALIGN_LEFT = 8,
|
ALIGN_LEFT = 8,
|
||||||
ALIGN_RIGHT = 16,
|
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;
|
CComponentsDetailsLine *details_line;
|
||||||
CComponentsInfoBox *info_box;
|
CComponentsInfoBox *info_box;
|
||||||
int hint_height;
|
int hint_height;
|
||||||
CComponentsHeader *header;
|
CComponentsHeader *header, *sub_header;
|
||||||
CComponentsFooter *footer;
|
CComponentsFooter *footer;
|
||||||
|
std::string subhead_text;
|
||||||
unsigned int saveScreen_width ;
|
unsigned int saveScreen_width ;
|
||||||
unsigned int saveScreen_height;
|
unsigned int saveScreen_height;
|
||||||
unsigned int saveScreen_y;
|
unsigned int saveScreen_y;
|
||||||
@@ -609,6 +610,7 @@ class CMenuWidget : public CMenuTarget, public CComponentsSignals
|
|||||||
void restoreScreen();
|
void restoreScreen();
|
||||||
void setMenuPos(const int& menu_width);
|
void setMenuPos(const int& menu_width);
|
||||||
void initHeader();
|
void initHeader();
|
||||||
|
void initSubHeader();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CMenuWidget();
|
CMenuWidget();
|
||||||
|
Reference in New Issue
Block a user