[vdr] [ANNOUNCE] vdr-iaxphone-0.0.3 - a softphone for vdr
Klaus Schmidinger
Klaus.Schmidinger at cadsoft.de
Sun Aug 7 16:00:19 CEST 2005
Luca Olivetti wrote:
> Luca Olivetti wrote:
>
>>
>> - Reworked the osd (using own cStatusMenu class instead of cOsdMenu, the
>> former reserves some lines on top to show status information)
>
>
> Btw, if you could do something like the following patch I wouldn't need
> to reimplement the whole cOsdMenu in my plugin ;-)
>
> Bye
>
>
> ------------------------------------------------------------------------
>
> diff --unified --recursive orig/osdbase.c new/osdbase.c
> --- orig/osdbase.c 2005-08-04 16:07:10.745702589 +0200
> +++ new/osdbase.c 2005-08-05 10:05:49.449609914 +0200
> @@ -67,7 +67,7 @@
> int cOsdMenu::displayMenuCount = 0;
> int cOsdMenu::displayMenuItems = 0;//XXX dynamic???
>
> -cOsdMenu::cOsdMenu(const char *Title, int c0, int c1, int c2, int c3, int c4)
> +cOsdMenu::cOsdMenu(const char *Title, int c0, int c1, int c2, int c3, int c4, int res)
> {
> isMenu = true;
> digit = 0;
> @@ -77,6 +77,7 @@
> SetCols(c0, c1, c2, c3, c4);
> first = 0;
> current = marked = -1;
> + reserved = res;
> subMenu = NULL;
> helpRed = helpGreen = helpYellow = helpBlue = NULL;
> status = NULL;
> @@ -84,6 +85,7 @@
> displayMenu = Skins.Current()->DisplayMenu();
> displayMenuItems = displayMenu->MaxItems();
> }
> + displayMenuItems -= reserved;
> }
>
> cOsdMenu::~cOsdMenu()
> @@ -93,6 +95,7 @@
> free(status);
> displayMenu->Clear();
> cStatus::MsgOsdClear();
> + displayMenuItems += reserved;
> if (!--displayMenuCount)
> DELETENULL(displayMenu);
> }
> @@ -121,6 +124,13 @@
> cols[4] = c4;
> }
>
> +void cOsdMenu::SetReserved(int res)
> +{
> + displayMenuItems += reserved;
> + reserved = res;
> + displayMenuItems -= reserved;
> +}
> +
> void cOsdMenu::SetHasHotkeys(void)
> {
> hasHotkeys = true;
> @@ -207,10 +217,12 @@
> if (first < 0)
> first = 0;
> }
> + //text2skin doesn't cope well with out of order menu items
Am I getting this right? You want me to make this change because
text2skin doesn't behave correctly?
Klaus
> + if(reserved) for (int kk=0; kk<reserved; kk++) displayMenu->SetItem("",kk,false,false);
> int i = first;
> int n = 0;
> for (cOsdItem *item = Get(first); item; item = Next(item)) {
> - displayMenu->SetItem(item->Text(), i - first, i == current, item->Selectable());
> + displayMenu->SetItem(item->Text(), i - first + reserved, i == current, item->Selectable());
> if (i == current)
> cStatus::MsgOsdCurrentItem(item->Text());
> if (++n == displayMenuItems)
> @@ -238,7 +250,7 @@
> {
> cOsdItem *item = Get(current);
> if (item) {
> - displayMenu->SetItem(item->Text(), current - first, Current, item->Selectable());
> + displayMenu->SetItem(item->Text(), current - first + reserved, Current, item->Selectable());
> if (Current)
> cStatus::MsgOsdCurrentItem(item->Text());
> if (!Current)
> diff --unified --recursive orig/osdbase.h new/osdbase.h
> --- orig/osdbase.h 2005-08-04 16:07:10.745702589 +0200
> +++ new/osdbase.h 2005-08-04 16:04:28.254938058 +0200
> @@ -89,7 +89,7 @@
> static int displayMenuItems;
> char *title;
> int cols[cSkinDisplayMenu::MaxTabs];
> - int first, current, marked;
> + int first, current, marked, reserved;
> cOsdMenu *subMenu;
> const char *helpRed, *helpGreen, *helpYellow, *helpBlue;
> char *status;
> @@ -99,6 +99,7 @@
> cSkinDisplayMenu *DisplayMenu(void) { return displayMenu; }
> const char *hk(const char *s);
> void SetCols(int c0, int c1 = 0, int c2 = 0, int c3 = 0, int c4 = 0);
> + void SetReserved(int res);
> void SetHasHotkeys(void);
> virtual void Clear(void);
> bool SelectableItem(int idx);
> @@ -119,7 +120,7 @@
> void SetHelp(const char *Red, const char *Green = NULL, const char *Yellow = NULL, const char *Blue = NULL);
> virtual void Del(int Index);
> public:
> - cOsdMenu(const char *Title, int c0 = 0, int c1 = 0, int c2 = 0, int c3 = 0, int c4 = 0);
> + cOsdMenu(const char *Title, int c0 = 0, int c1 = 0, int c2 = 0, int c3 = 0, int c4 = 0, int res=0);
> virtual ~cOsdMenu();
> int Current(void) { return current; }
> void Add(cOsdItem *Item, bool Current = false, cOsdItem *After = NULL);
More information about the vdr
mailing list