Fixed handling tabbed item display in 'skincurses'

This commit is contained in:
Klaus Schmidinger 2006-06-03 13:21:33 +02:00
parent a12a504fad
commit 9966e03e29
6 changed files with 20 additions and 11 deletions

View File

@ -4763,3 +4763,4 @@ Video Disk Recorder Revision History
- Fixed handling the display of the '*' indicator in the "What's on now/next?" - Fixed handling the display of the '*' indicator in the "What's on now/next?"
menu, so that events that haven't been "seen" in the data stream within 30 menu, so that events that haven't been "seen" in the data stream within 30
seconds won't be shown as "running". seconds won't be shown as "running".
- Fixed handling tabbed item display in 'skincurses'.

View File

@ -29,3 +29,7 @@ VDR Plugin 'skincurses' Revision History
2006-04-14: Version 0.0.6 2006-04-14: Version 0.0.6
- Added a missing "Key$" in skincurses.c. - Added a missing "Key$" in skincurses.c.
2006-06-03: Version 0.0.7
- Fixed handling tabbed item display.

View File

@ -3,7 +3,7 @@
* *
* See the README file for copyright information and how to reach the author. * See the README file for copyright information and how to reach the author.
* *
* $Id: skincurses.c 1.8 2006/04/14 11:35:59 kls Exp $ * $Id: skincurses.c 1.9 2006/06/03 13:21:33 kls Exp $
*/ */
#include <ncurses.h> #include <ncurses.h>
@ -11,7 +11,7 @@
#include <vdr/plugin.h> #include <vdr/plugin.h>
#include <vdr/skins.h> #include <vdr/skins.h>
static const char *VERSION = "0.0.6"; static const char *VERSION = "0.0.7";
static const char *DESCRIPTION = "A text only skin"; static const char *DESCRIPTION = "A text only skin";
static const char *MAINMENUENTRY = NULL; static const char *MAINMENUENTRY = NULL;
@ -277,6 +277,7 @@ public:
virtual void SetEvent(const cEvent *Event); virtual void SetEvent(const cEvent *Event);
virtual void SetRecording(const cRecording *Recording); virtual void SetRecording(const cRecording *Recording);
virtual void SetText(const char *Text, bool FixedFont); virtual void SetText(const char *Text, bool FixedFont);
virtual const cFont *GetTextAreaFont(bool FixedFont) const { return &Font; }
virtual void Flush(void); virtual void Flush(void);
}; };
@ -366,13 +367,13 @@ void cSkinCursesDisplayMenu::SetItem(const char *Text, int Index, bool Current,
for (int i = 0; i < MaxTabs; i++) { for (int i = 0; i < MaxTabs; i++) {
const char *s = GetTabbedText(Text, i); const char *s = GetTabbedText(Text, i);
if (s) { if (s) {
int xt = Tab(i); int xt = Tab(i) / 12;// Tab() is in "pixel" - see also skins.c!!!
osd->DrawText(xt, y, s, ColorFg, ColorBg, &Font, OsdWidth - xt); osd->DrawText(xt, y, s, ColorFg, ColorBg, &Font, OsdWidth - xt);
} }
if (!Tab(i + 1)) if (!Tab(i + 1))
break; break;
} }
SetEditableWidth(OsdWidth - Tab(1)); SetEditableWidth(OsdWidth - Tab(1) / 12); // Tab() is in "pixel" - see also skins.c!!!
} }
void cSkinCursesDisplayMenu::SetEvent(const cEvent *Event) void cSkinCursesDisplayMenu::SetEvent(const cEvent *Event)

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: menuitems.c 1.44 2006/04/25 15:59:02 kls Exp $ * $Id: menuitems.c 1.45 2006/06/03 13:20:01 kls Exp $
*/ */
#include "menuitems.h" #include "menuitems.h"
@ -296,7 +296,10 @@ void cMenuEditStrItem::Set(void)
char buf[1000]; char buf[1000];
if (InEditMode()) { if (InEditMode()) {
const cFont *font = cFont::GetFont(fontOsd); // This is an ugly hack to make editing strings work with the 'skincurses' plugin.
const cFont *font = dynamic_cast<cSkinDisplayMenu *>(cSkinDisplay::Current())->GetTextAreaFont(false);
if (!font || font->Width("W") != 1) // all characters have with == 1 in the font used by 'skincurses'
font = cFont::GetFont(fontOsd);
strncpy(buf, value, pos); strncpy(buf, value, pos);
snprintf(buf + pos, sizeof(buf) - pos - 2, insert && newchar ? "[]%c%s" : "[%c]%s", *(value + pos), value + pos + 1); snprintf(buf + pos, sizeof(buf) - pos - 2, insert && newchar ? "[]%c%s" : "[%c]%s", *(value + pos), value + pos + 1);
int width = cSkinDisplay::Current()->EditableWidth(); int width = cSkinDisplay::Current()->EditableWidth();

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: skins.c 1.9 2006/04/09 11:25:30 kls Exp $ * $Id: skins.c 1.10 2006/06/03 10:18:07 kls Exp $
*/ */
#include "skins.h" #include "skins.h"
@ -79,7 +79,7 @@ void cSkinDisplayMenu::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, int Tab5)
tabs[4] = Tab4 ? tabs[3] + Tab4 : 0; tabs[4] = Tab4 ? tabs[3] + Tab4 : 0;
tabs[5] = Tab5 ? tabs[4] + Tab5 : 0; tabs[5] = Tab5 ? tabs[4] + Tab5 : 0;
for (int i = 1; i < MaxTabs; i++) for (int i = 1; i < MaxTabs; i++)
tabs[i] *= 12;//XXX average character width of font used for items!!! tabs[i] *= 12;//XXX average character width of font used for items - see also skincurses.c!!!
} }
void cSkinDisplayMenu::Scroll(bool Up, bool Page) void cSkinDisplayMenu::Scroll(bool Up, bool Page)

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: skins.h 1.13 2006/04/09 11:23:35 kls Exp $ * $Id: skins.h 1.14 2006/06/03 10:21:45 kls Exp $
*/ */
#ifndef __SKINS_H #ifndef __SKINS_H
@ -95,7 +95,7 @@ protected:
cTextScroller textScroller; cTextScroller textScroller;
int Tab(int n) { return (n >= 0 && n < MaxTabs) ? tabs[n] : 0; } int Tab(int n) { return (n >= 0 && n < MaxTabs) ? tabs[n] : 0; }
///< Returns the offset of the given tab from the left border of the ///< Returns the offset of the given tab from the left border of the
///< item display area. The value returned is in pixel.//XXX ncurses??? ///< item display area. The value returned is in pixel.
const char *GetTabbedText(const char *s, int Tab); const char *GetTabbedText(const char *s, int Tab);
///< Returns the part of the given string that follows the given ///< Returns the part of the given string that follows the given
///< Tab (where 0 indicates the beginning of the string). If no such ///< Tab (where 0 indicates the beginning of the string). If no such
@ -104,7 +104,7 @@ public:
cSkinDisplayMenu(void); cSkinDisplayMenu(void);
virtual void SetTabs(int Tab1, int Tab2 = 0, int Tab3 = 0, int Tab4 = 0, int Tab5 = 0); virtual void SetTabs(int Tab1, int Tab2 = 0, int Tab3 = 0, int Tab4 = 0, int Tab5 = 0);
///< Sets the tab columns to the given values, which are the number of ///< Sets the tab columns to the given values, which are the number of
///< characters in each column.//XXX ncurses??? ///< characters in each column.
virtual void Scroll(bool Up, bool Page); virtual void Scroll(bool Up, bool Page);
///< If this menu contains a text area that can be scrolled, this function ///< If this menu contains a text area that can be scrolled, this function
///< will be called to actually scroll the text. Up indicates whether the ///< will be called to actually scroll the text. Up indicates whether the