Setup-Menü mit dynamischer Breite

  • kamel5 cMenuSetupSubMenu ist direkt von cOsdMenu abgeleitet, und im Constructor wird 40 für c0 übergeben. Damit sollte eigentlich konstant dieser Wert verwendet werden. Ansonsten kocht das Plugin anscheinend sein völlig eigenes Süppchen, was das Tab-Handling betrifft, do dass es von dem neuen Mechanismus, soweit ich das sehen kann, gar nicht profitieren dürfte. Da cMenuSetupSubMenu nicht von cMenuSetupPage abgeleitet ist, greift insbesondere die neu eingeführte Funktion cMenuSetupPage::Display() nicht, kann also deswegen den Fehler nicht hervorrufen. Ansonsten hat sich ja nur cSkinDisplayMenu::SetTabs() geändert.

    cNopacityDisplayMenu ist von cSkinDisplayMenu abgeleitet und implementiert sein eigenes SetTabs(). Dieses gibt die Werte an menuView->SetTabs() weiter, ruft aber nicht cSkinDisplayMenu::SetTabs() auf. Für mich ist das der Kern des Problems. Das Plugin mischt sich in Dinge ein, die es eigentlich nichts angehen. Es sollte das Tab-Handling der Basisklasse überlassen und die dafür vorgesehene Funktion cSkinDisplayMenu::Tab() verwenden.

  • Ein Versuch, das Ganze vielleicht irgendwie zu retten, könnte das hier sein:

    Code
    void cNopacityDisplayMenu::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, int Tab5) {
        cSkinDisplayMenu::SetTabs(Tab1, Tab2, Tab3, Tab4, Tab5);
        menuView->SetTabs(cSkinDisplayMenu::Tab(1),
                          cSkinDisplayMenu::Tab(2) - cSkinDisplayMenu::Tab(1),
                          cSkinDisplayMenu::Tab(3) - cSkinDisplayMenu::Tab(2),
                          cSkinDisplayMenu::Tab(4) - cSkinDisplayMenu::Tab(3),
                          cSkinDisplayMenu::Tab(5) - cSkinDisplayMenu::Tab(4));
    }

    Ungetestet, da ich das Plugin hier nicht übersetzen kann.

    Das ganze Tab-Handling in diesem Plugin gehört eigentlich komplett entsorgt...

  • Das ganze Tab-Handling in diesem Plugin gehört eigentlich komplett entsorgt...

    Das war auch mein erster Gedanke. Ich weiß im Moment nur nicht, wo sich das alles auswirkt. Ich brauche da mal ein paar Tage, um mir das tiefgründiger anzusehen.
    In diesem Fall hoffe ich, das vdr-2.8.2 noch nicht so bald kommt. ;) Es wäre unschön, wenn ich dann noch keine Lösung hätte.

    Grüße
    kamel5

    VDR 2.8.1: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 10TB HD mit ZFS RaidZ, GT1030, Fedora 44 Kernel 7.0 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Hiermit funktioniert es bei mir:

    Ob das allerdings alles fixt, weiß ich nicht. Ich habe nur die Untermenüs des nopacity-Plugins geöffnet, und die zweite Spalte wurde dargestellt.

  • Oder noch besser so, damit bleibt die originale Skalierung für Characters erhalten:

  • Noch eine kleine Korrektur:

  • Hallo kls ,

    mit der Version aus #66 sehen die ersten Tests sehr gut aus. Ich werde das jetzt noch eine Weile beobachten und auch ohne den Patch Version 07 nochmal gegentesten, ob es noch Änderungsbedarf für ältere VDR-Versionen gibt.

    Vielen Dank für die Unterstützung.

    Um das Ganze nochmal klarzustellen, wenn ich im Setup-Menü Untermenüs von cOsdMenu ableite, muss ich weiterhin mit SetCols() einen Wert vorgeben?

    Grüße
    kamel5

    VDR 2.8.1: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 10TB HD mit ZFS RaidZ, GT1030, Fedora 44 Kernel 7.0 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Ja, wenn du von cOsdMenu ableitest, musst du selber SetCols() aufrufen. So wie es aussieht kannst du das aber auch so lassen, wenn du die Änderungen aus #66 einbaust, und musst nicht auf cMenuSetupPage umstellen. Dann hast du halt keine dynamisch angepasste Spaltenbreite, sondern deinen fest vorgegebenen Wert (40, soweit ich das sehe).

  • Wie sieht denn jetzt das Setup-Menü bei dir mit dem Patch aus #47 aus?

    Ja, funktioniert jetzt, allerdings nur im Setupmenü.

    Den neuen "Pixelmodus" bei der ersten Spalte hatte ich irgendwie übersehen.

    The content cannot be displayed because you do not have authorisation to view this content.
    The content cannot be displayed because you do not have authorisation to view this content.
    The content cannot be displayed because you do not have authorisation to view this content.

    Früher begann die 2. Spalte immer ~3 Zeichen weiter links, als im untersten Bild.

    The content cannot be displayed because you do not have authorisation to view this content.


    Mir ist Aufgefallen, dass bei mehreren Spalten die vorderen nur aus Zahlen bestehen und evtl. den Abkürzungen der Wochentage. Oder habe ich da ein Menü übersehen?

    Wenn das so ist, könnte man doch recht einfach die Zeichenbreite brauchbar genau bestimmen:
    static int AvgCharWidth(void) { return Font->Width(cString("234567890")) / 
    9; }
    Ich bin nur nicht sicher ob man in dem Kontext mit vertretbarem Aufwand an den Font ran kommt.

    Gruss
    SHF

    Mein (neuer) VDR:

    Software:
    Debian Wheezy mit Kernel 3.14
    VDR 2.0.7 & div. Plugins aus YaVDR-Paketen
    noad 0.8.6

    Hardware:
    MSI C847MS-E33, onboard 2x1,1GHz Sandybridge Celeron 847, 4GiB RAM
    32GB SSD (System), 4TB 3,5" WD-Red HDD (Video)
    TT FF DVB-S 1.5 FullTS-Mod PWM-Vreg-Mod, DVB-Sky 852 Dual DVB-S2
    Das ganze im alten HP Vectra VLi8-Gehäuse versorgt von:
    PicoPSU-160-XT und Meanwell EPP-150 im ATX-NT-Gehäuse

    Edited once, last by SHF (May 21, 2026 at 12:54 AM).

  • Haben Zahlen nicht alle die selbe Breite?


    Edit: Ist denn das bestimmen mit font->width() so aufwändig? Wäre genau und Werte könnte man auch in einen Cache speichern

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte: MV_Backup (RSync) | MV_BorgBackup (Borg)
    Skin: Skin FlatPlus

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.9)

    VDR 2.7.9; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    > Systeminfo.txt < [VDR-User #1540]

    Edited once, last by MegaV0lt (May 21, 2026 at 11:17 AM).

  • Haben Zahlen nicht alle die selbe Breite?


    Edit: Ist denn das bestimmen mit font->width so aufwändig? Wäre genau und Werte könnte man auch in einen Cache speichern

    In den meisten "normalen" Schriftarten (wie Arial, Helvetica oder Times New Roman) haben Zahlen nicht die gleiche Breite. Man nennt dies proportionale Ziffern. Eine "1" ist dort deutlich schmaler als eine "8".

  • Ja, funktioniert jetzt, allerdings nur im Setupmenü.

    Das ist richtig.

    Früher begann die 2. Spalte immer ~3 Zeichen weiter links, als im untersten Bild.

    Da kann ich jetzt nicht ganz folgen. Wenn ich die Dateinamen richtig interpretiere, dann zeigen die ersten drei Bilder den Zustand nach Anwendung des Patches, und das vierte Bild den vorher. Mit Patch ist bei "DejaVu Sans:Condensed" die rechte Spalte deutlich weiter links. Übersehe ich da was?

    Mir ist Aufgefallen, dass bei mehreren Spalten die vorderen nur aus Zahlen bestehen und evtl. den Abkürzungen der Wochentage. Oder habe ich da ein Menü übersehen?

    Es gibt auch "MTWTFSS", das trägt ziemlich auf.

    Ich habe diese Änderung gemacht, weil im Setup-Menü manchmal Texte in der ersten Spalte abgeschnitten wurden. In den anderen Menüs sehe ich dieses Problem nicht, daher lasse ich es da mal so, wie es ist.

  • Hier mal ein Test:

    Screenshot direkt von hier aus der Antwortbox. Sieht für mich gleich aus (Linie in Rot ist von mir)

    The content cannot be displayed because you do not have authorisation to view this content.

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte: MV_Backup (RSync) | MV_BorgBackup (Borg)
    Skin: Skin FlatPlus

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.9)

    VDR 2.7.9; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    > Systeminfo.txt < [VDR-User #1540]

  • Zum Vergleich bei Buchstaben:


    The content cannot be displayed because you do not have authorisation to view this content.

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte: MV_Backup (RSync) | MV_BorgBackup (Borg)
    Skin: Skin FlatPlus

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.9)

    VDR 2.7.9; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    > Systeminfo.txt < [VDR-User #1540]

  • Da kann ich jetzt nicht ganz folgen. Wenn ich die Dateinamen richtig interpretiere, dann zeigen die ersten drei Bilder den Zustand nach Anwendung des Patches, und das vierte Bild den vorher. Mit Patch ist bei "DejaVu Sans:Condensed" die rechte Spalte deutlich weiter links. Übersehe ich da was?

    Nein, Du übersiehst nichts.
    Bild 4 ist lediglich zum Vergleich gewesen, der Vollständigkeit halber.
    Die Spalte bewegt sich dort nicht, egal welcher der 3 Fonts verwendet wird.

    Ich habe diese Änderung gemacht, weil im Setup-Menü manchmal Texte in der ersten Spalte abgeschnitten wurden. In den anderen Menüs sehe ich dieses Problem nicht, daher lasse ich es da mal so, wie es ist.

    Der Beweggrund ist mir schon klar.
    (Allerdings kratzt es mich wenig, wenn Setup-Menü mal etwas vom Text abgeschnitten ist. Das benutzt man doch eh nur alle Jubeljahre mal. ;))

    Die Vorstellung extra Platz in letzten Spalte im Timer und Recordings-Menüs, durch den Einsatz eines schmaleren Fonts zu bekommen, finde ich aber äußerst verlockend.
    Das müsste sich recht einfach durch die Bestimmung der AvgCharWidth bewerkstelligen lassen.

    Es gibt auch "MTWTFSS", das trägt ziemlich auf.

    Das sind dann trotzdem nur eine Hand voll Möglichkeiten.
    Da ließe sich an Hand von ein paar Muster-Strings die eine Font-Weite recht einfach bestimmen.
    Das wird zwar nicht 100% exakt aber 99% oder so ähnlich und auf jeden Fall deutlich genauer als das angenommene Höhe*2/3.
    Den Wert müsste man auch nur beim Start vom VDR berechnen und wenn der Standard-Font geändert wird.

    Eine Idee, wie man das macht, hätte ich schon.
    Das dann würde eine kleine Funktion, die den Wert ausgibt.
    Ich habe momentan nur keine Idee, wo man das am besten unterbringt, um an Font->Width zu kommen. Alles andere dürfte überall "erreichbar" sein.

    Gruss
    SHF

    Mein (neuer) VDR:

    Software:
    Debian Wheezy mit Kernel 3.14
    VDR 2.0.7 & div. Plugins aus YaVDR-Paketen
    noad 0.8.6

    Hardware:
    MSI C847MS-E33, onboard 2x1,1GHz Sandybridge Celeron 847, 4GiB RAM
    32GB SSD (System), 4TB 3,5" WD-Red HDD (Video)
    TT FF DVB-S 1.5 FullTS-Mod PWM-Vreg-Mod, DVB-Sky 852 Dual DVB-S2
    Das ganze im alten HP Vectra VLi8-Gehäuse versorgt von:
    PicoPSU-160-XT und Meanwell EPP-150 im ATX-NT-Gehäuse

  • Hab auch schon versucht, die dynamische Menübreite zu verwenden. Leider sind die Einstellungsmenüs in flatPlus auch von cOSDMenu abgeleitet. Ich bekomme das nicht gebacken ;(

    setup.h

    https://github.com/MegaV0lt/vdr-p…er/setup.c#L798

    Ist das viel Aufwand umzustellen? Vielleicht hat ja jemand Lust sich das anzuschauen?

    Kanallogos: Picon.cz2VDR | Picons2VDR | MP-Logos
    Backupskripte: MV_Backup (RSync) | MV_BorgBackup (Borg)
    Skin: Skin FlatPlus

    "Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde."
    [Ken Olson], Präsident der Digital Equipment Corp., 1977

    VDR01 - yaVDR 0.7 (VDR 2.7.9)

    VDR 2.7.9; Gehäuse: Antec Fusion V2 Black & iMon LCD; Atric IR-Einschalter Rev. 4; Board: Intel DH77EB, Core i5-3550, GTX 1050 Ti, 8 GB RAM; DVB: 1x Digital Devices CineS2 Quad V6.5

    > Systeminfo.txt < [VDR-User #1540]

  • Lieber kamel5,

    bist du am Skindesigner auch noch dran? Mit VDR 2.8.2 und dem aktuellen Git-Stand des Skindesigner stehen die Parameter linksbündig (siehe Foto)

    The content cannot be displayed because you do not have authorisation to view this content.

    Herzliche Grüße

    Michael

    VDR 2.8.2 (oben): Asus M4N68T-M-LE-V2, 2GB RAM, 120GB SSD, 1TB HD, AMD Athlon(tm) II X4 640 @ 3GHz, NVIDIA GT1030 (V580.119.02), FFMPEG 8.1, OpenSuse Leap 15.6 (X-Server) Kernel 6.4.0, 2x Budget + 1x Hauppauge WinTV-DualHD, VDPAU (Softhddev.)

    VDR 2.8.2 (unten): Asus P8H77-V LE, 8GB RAM, 120GB SSD, 2TB HD, Intel(R) Celeron(R) G1620 @ 2.70GHz, NVIDIA GT630 (V470.223.02), FFMPEG 7.0.2, OpenSuse Leap 15.1 (X-Server) Kernel 5.6.8, DD Cine V6.1 Dual + Hauppauge WinTV-quadHD, VDPAU (Softhddev.)

  • bist du am Skindesigner auch noch dran?

    Wenn es um Fehler geht schon.

    Mit VDR 2.8.2 und dem aktuellen Git-Stand des Skindesigner stehen die Parameter linksbündig (siehe Foto)

    Daran kann ich nicht viel ändern, das liegt am Skin selbst (an den xml-Dateien). Wenn Du mal den Skin estuary4vdr testest (den liefere ich mit aus), wirst Du sehen, das es funktioniert. Wo die einzelnen Elemente dargestellt werden, wird in den xml-Dateien festgelegt.

    Grüße
    kamel5

    VDR 2.8.1: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 10TB HD mit ZFS RaidZ, GT1030, Fedora 44 Kernel 7.0 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Daran kann ich nicht viel ändern

    Ich habe noch mal etwas genauer nachgesehen. Es gibt Skins, bei denen die Setup-Seite funktioniert, und es gibt Skins bei denen das nicht funktioniert.
    Ich werde mal versuchen, den Unterschied zu ergründen, und gegebenenfalls das im skindesigner zu fixen. Da das aber aufwändig sein könnte, werde ich wohl dafür zeitnah keine Lösung haben.

    Grüße
    kamel5

    VDR 2.8.1: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 10TB HD mit ZFS RaidZ, GT1030, Fedora 44 Kernel 7.0 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Zuerst einmal vielen Dank fürs Kümmern. Ich hatte gedacht, daß entsprechend des Hinweises von Klaus in der History:

    Quote

    - The first column in the Setup menus is now sized dynamically, to avoid truncating texts.
    If any of the values in a call to cOsdMenu::SetCols() or cSkinDisplayMenu::SetTabs() is
    negative, it is now considered to be given as actual pixels.
    Plugins that reimplement cSkinDisplayMenu::SetTabs() need to adapt this function to handle
    negative values. See the default implementation in cSkinDisplayMenu::SetTabs().

    im Skindesigner auch was angepasst werden muß. Ich habe mir vor ewigen Zeiten mal den Skin Blackhole auf meine Bedürfnisse angepasst und nutze ihn auf beiden VDR.

    Ich habe mir mein displaymenusetup.xml mal angeschaut, es ist mir aber im ersten Moment nichts aufgefallen.

    Es wäre toll, wenn du was findest :bounce1

    VDR 2.8.2 (oben): Asus M4N68T-M-LE-V2, 2GB RAM, 120GB SSD, 1TB HD, AMD Athlon(tm) II X4 640 @ 3GHz, NVIDIA GT1030 (V580.119.02), FFMPEG 8.1, OpenSuse Leap 15.6 (X-Server) Kernel 6.4.0, 2x Budget + 1x Hauppauge WinTV-DualHD, VDPAU (Softhddev.)

    VDR 2.8.2 (unten): Asus P8H77-V LE, 8GB RAM, 120GB SSD, 2TB HD, Intel(R) Celeron(R) G1620 @ 2.70GHz, NVIDIA GT630 (V470.223.02), FFMPEG 7.0.2, OpenSuse Leap 15.1 (X-Server) Kernel 5.6.8, DD Cine V6.1 Dual + Hauppauge WinTV-quadHD, VDPAU (Softhddev.)

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!