mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Fixed handling OSD color button texts in case a menu item has texts of its own
This commit is contained in:
parent
e7b0f909ff
commit
c5eb60f07a
@ -1135,6 +1135,8 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
|
||||
"word by word"
|
||||
for reporting a problem with color palettes in subtitles
|
||||
for adding some typecasts to silence gcc compiler warnings
|
||||
for reporting a bug in handling OSD color button texts in case a menu item has
|
||||
texts of its own
|
||||
|
||||
Ralf Klueber <ralf.klueber@vodafone.com>
|
||||
for reporting a bug in cutting a recording if there is only a single editing mark
|
||||
|
5
HISTORY
5
HISTORY
@ -6947,3 +6947,8 @@ Video Disk Recorder Revision History
|
||||
- Added a Query parameter to cDevice::GetDevice(), so that devices can be queried
|
||||
without side effects when zapping.
|
||||
- Replaced min(max()) calls with the new function constrain().
|
||||
- Fixed handling OSD color button texts in case a menu item has texts of its own
|
||||
(reported by Rolf Ahrenberg). If a plugin creates derived cMenuEditItems that set
|
||||
color button texts, these should not set the texts directly by calling
|
||||
cSkinDisplay::Current()->SetButtons(), but rather call the new member function
|
||||
cMenuEditItem::SetHelp().
|
||||
|
28
menuitems.c
28
menuitems.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: menuitems.c 2.10 2011/08/12 13:19:40 kls Exp $
|
||||
* $Id: menuitems.c 2.11 2012/03/02 15:49:57 kls Exp $
|
||||
*/
|
||||
|
||||
#include "menuitems.h"
|
||||
@ -26,6 +26,7 @@ const char *FileNameChars = trNOOP("FileNameChars$ abcdefghijklmnopqrstuvwxyz012
|
||||
cMenuEditItem::cMenuEditItem(const char *Name)
|
||||
{
|
||||
name = strdup(Name ? Name : "???");
|
||||
SetHelp(NULL);
|
||||
}
|
||||
|
||||
cMenuEditItem::~cMenuEditItem()
|
||||
@ -40,6 +41,27 @@ void cMenuEditItem::SetValue(const char *Value)
|
||||
cStatus::MsgOsdCurrentItem(buffer);
|
||||
}
|
||||
|
||||
void cMenuEditItem::SetHelp(const char *Red, const char *Green, const char *Yellow, const char *Blue)
|
||||
{
|
||||
// strings are NOT copied - must be constants!!!
|
||||
helpRed = Red;
|
||||
helpGreen = Green;
|
||||
helpYellow = Yellow;
|
||||
helpBlue = Blue;
|
||||
helpDisplayed = false;
|
||||
}
|
||||
|
||||
bool cMenuEditItem::DisplayHelp(void)
|
||||
{
|
||||
bool HasHelp = helpRed || helpGreen || helpYellow || helpBlue;
|
||||
if (HasHelp && !helpDisplayed) {
|
||||
cSkinDisplay::Current()->SetButtons(helpRed, helpGreen, helpYellow, helpBlue);
|
||||
cStatus::MsgOsdHelpKeys(helpRed, helpGreen, helpYellow, helpBlue);
|
||||
helpDisplayed = true;
|
||||
}
|
||||
return HasHelp;
|
||||
}
|
||||
|
||||
// --- cMenuEditIntItem ------------------------------------------------------
|
||||
|
||||
cMenuEditIntItem::cMenuEditIntItem(const char *Name, int *Value, int Min, int Max, const char *MinString, const char *MaxString)
|
||||
@ -382,9 +404,9 @@ void cMenuEditStrItem::LeaveEditMode(bool SaveValue)
|
||||
void cMenuEditStrItem::SetHelpKeys(void)
|
||||
{
|
||||
if (InEditMode())
|
||||
cSkinDisplay::Current()->SetButtons(tr("Button$ABC/abc"), insert ? tr("Button$Overwrite") : tr("Button$Insert"), tr("Button$Delete"));
|
||||
SetHelp(tr("Button$ABC/abc"), insert ? tr("Button$Overwrite") : tr("Button$Insert"), tr("Button$Delete"));
|
||||
else
|
||||
cSkinDisplay::Current()->SetButtons(NULL);
|
||||
SetHelp(NULL);
|
||||
}
|
||||
|
||||
uint *cMenuEditStrItem::IsAllowed(uint c)
|
||||
|
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: menuitems.h 2.5 2011/06/13 13:46:03 kls Exp $
|
||||
* $Id: menuitems.h 2.6 2012/03/02 15:49:57 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __MENUITEMS_H
|
||||
@ -19,10 +19,15 @@ extern const char *FileNameChars;
|
||||
class cMenuEditItem : public cOsdItem {
|
||||
private:
|
||||
char *name;
|
||||
const char *helpRed, *helpGreen, *helpYellow, *helpBlue;
|
||||
bool helpDisplayed;
|
||||
protected:
|
||||
void SetHelp(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL);
|
||||
public:
|
||||
cMenuEditItem(const char *Name);
|
||||
~cMenuEditItem();
|
||||
void SetValue(const char *Value);
|
||||
bool DisplayHelp(void);
|
||||
};
|
||||
|
||||
class cMenuEditIntItem : public cMenuEditItem {
|
||||
|
25
osdbase.c
25
osdbase.c
@ -4,13 +4,14 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: osdbase.c 2.3 2010/12/12 13:41:28 kls Exp $
|
||||
* $Id: osdbase.c 2.4 2012/03/02 15:49:57 kls Exp $
|
||||
*/
|
||||
|
||||
#include "osdbase.h"
|
||||
#include <string.h>
|
||||
#include "device.h"
|
||||
#include "i18n.h"
|
||||
#include "menuitems.h"
|
||||
#include "remote.h"
|
||||
#include "status.h"
|
||||
|
||||
@ -85,6 +86,7 @@ cOsdMenu::cOsdMenu(const char *Title, int c0, int c1, int c2, int c3, int c4)
|
||||
current = marked = -1;
|
||||
subMenu = NULL;
|
||||
helpRed = helpGreen = helpYellow = helpBlue = NULL;
|
||||
helpDisplayed = false;
|
||||
status = NULL;
|
||||
if (!displayMenuCount++)
|
||||
SetDisplayMenu();
|
||||
@ -154,6 +156,15 @@ void cOsdMenu::SetTitle(const char *Title)
|
||||
title = strdup(Title);
|
||||
}
|
||||
|
||||
void cOsdMenu::DisplayHelp(bool Force)
|
||||
{
|
||||
if (!helpDisplayed || Force) {
|
||||
displayMenu->SetButtons(helpRed, helpGreen, helpYellow, helpBlue);
|
||||
cStatus::MsgOsdHelpKeys(helpRed, helpGreen, helpYellow, helpBlue);
|
||||
helpDisplayed = true;
|
||||
}
|
||||
}
|
||||
|
||||
void cOsdMenu::SetHelp(const char *Red, const char *Green, const char *Yellow, const char *Blue)
|
||||
{
|
||||
// strings are NOT copied - must be constants!!!
|
||||
@ -161,8 +172,7 @@ void cOsdMenu::SetHelp(const char *Red, const char *Green, const char *Yellow, c
|
||||
helpGreen = Green;
|
||||
helpYellow = Yellow;
|
||||
helpBlue = Blue;
|
||||
displayMenu->SetButtons(helpRed, helpGreen, helpYellow, helpBlue);
|
||||
cStatus::MsgOsdHelpKeys(helpRed, helpGreen, helpYellow, helpBlue);
|
||||
DisplayHelp(true);
|
||||
}
|
||||
|
||||
void cOsdMenu::Del(int Index)
|
||||
@ -205,8 +215,7 @@ void cOsdMenu::Display(void)
|
||||
displayMenu->SetTabs(cols[0], cols[1], cols[2], cols[3], cols[4]);//XXX
|
||||
displayMenu->SetTitle(title);
|
||||
cStatus::MsgOsdTitle(title);
|
||||
displayMenu->SetButtons(helpRed, helpGreen, helpYellow, helpBlue);
|
||||
cStatus::MsgOsdHelpKeys(helpRed, helpGreen, helpYellow, helpBlue);
|
||||
DisplayHelp(true);
|
||||
int count = Count();
|
||||
if (count > 0) {
|
||||
int ni = 0;
|
||||
@ -263,6 +272,12 @@ void cOsdMenu::DisplayCurrent(bool Current)
|
||||
cStatus::MsgOsdCurrentItem(item->Text());
|
||||
if (!Current)
|
||||
item->SetFresh(true); // leaving the current item resets 'fresh'
|
||||
if (cMenuEditItem *MenuEditItem = dynamic_cast<cMenuEditItem *>(item)) {
|
||||
if (!MenuEditItem->DisplayHelp())
|
||||
DisplayHelp();
|
||||
else
|
||||
helpDisplayed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: osdbase.h 2.1 2010/01/16 14:25:31 kls Exp $
|
||||
* $Id: osdbase.h 2.2 2012/03/02 15:49:57 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __OSDBASE_H
|
||||
@ -92,9 +92,11 @@ private:
|
||||
int first, current, marked;
|
||||
cOsdMenu *subMenu;
|
||||
const char *helpRed, *helpGreen, *helpYellow, *helpBlue;
|
||||
bool helpDisplayed;
|
||||
char *status;
|
||||
int digit;
|
||||
bool hasHotkeys;
|
||||
void DisplayHelp(bool Force = false);
|
||||
protected:
|
||||
void SetDisplayMenu(void);
|
||||
cSkinDisplayMenu *DisplayMenu(void) { return displayMenu; }
|
||||
|
Loading…
Reference in New Issue
Block a user