[Reopend] Skins: Aufruf von SetMessage()?

  • Moin,


    mal ne blöde Frage, die der Titel schon andeutet: Wie kann ich es anstellen, in einem Skinplugin den Aufruf der Methode "void SetMessage(eMessageType Type, const char *Text)" in den Klassen cSkinDisplayChannel und cSkinDisplayMenu zu provozieren? In cSkin steht ja dokumentiert:


    Code
    virtual void SetMessage(eMessageType Type, const char *Text) = 0;
           ///< Sets a one line message Text, with the given Type. Type can be used
           ///< to determine, e.g., the colors for displaying the Text.
           ///< If Text is NULL, any previously displayed message must be removed, and
           ///< any previous contents overwritten by the message must be restored.


    ...aber ich schaffe es irgendwie nicht, den VDR dazu zu bewegen, eine solche Nachricht auszugeben.


    Nochmal zur Sicherheit: ich meine nicht die Klasse cSkinDisplayMessage, das ist klar...ich meine die Methode setMessage in den Klassen cSkinDisplayChannel und cSkinDisplayMenu. Jeweils ein Beispiel für beide Klassen wäre nett :)


    Ciao Louis

  • Die Methode ist pure virtual und dient nur als Platzhalter, wenn die nicht von einer anderen Klasse überschrieben wird und mit Leben erfüllt wird, dann passiert eben gar nichts.


    Leider habe ich habe keine Ahnung welche Plugins Klassen haben, die diese Methode überschreiben.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Wenn mich nicht alles täuscht ruft der VDR selbst diese Funktion im cSkinDisplayMenu auf wenn du versuchst einen Timer zu löschen, der momentan aufzeichnet. Das müsste die Meldung sein in der der VDR dich fragt ob du den Timer trotzdem löschen willst.

  • Moin!


    Die Methode ist pure virtual und dient nur als Platzhalter, wenn die nicht von einer anderen Klasse überschrieben wird und mit Leben erfüllt wird, dann passiert eben gar nichts.


    <OT mode="Oberlehrer">
    Fast richtig, nur, dass sie in einer abgeleiteten Klasse überschrieben werden muss.
    Wenn statt des "= 0" hinten dran ein "{ }" stehen würde, wäre sie ein Platzhalter, der nichts tut und der dann nur bei Bedarf überschrieben werden kann.
    </OT>


    louis: QueueMessage bzw. die Variante über svdrpsend ist dein Freund.


    Lars.

  • Moin,


    svdrpsend <MESG> wird über die cSkinDisplayMessage Klasse abgearbeitet...das isses nicht.


    Ich hab auch mal im VDR Code gestöbert...lediglich in der osdbase.c wird die Methode aufgerufen, und auch nur für cSkinDisplayMenu bzw. die Ableitungen davon. Anscheuínend kann man sich da irgendwie am Statusmonitor anmelden und darüber eine Message verschicken. Nur in welchen Fällen das passiert ist mir noch unklar. Für sSkinDisplayChannel ist das ganze anscheinend nur ein Platzhalter der nicht genutzt wird, jedenfalls finde ich keinen Aufruf dazu.


    Komischerweise hat Klaus das auch fleissig in seinen Skins implementiert...irgendwie muss es doch gebraucht werden?!


    Vielleich kann Klaus dazu mal was sagen? Ansonsten implementier ich die blind...scheint ja nicht sooo wichtig zu sein :)


    Ciao Louis

  • Komischerweise hat Klaus das auch fleissig in seinen Skins implementiert...irgendwie muss es doch gebraucht werden?!


    Das ist doch die spezial Message-Form die auch angezeigt wird wenn die Menus offen sind (das normale wird ja erst angezeigt wenn die Menus zu sind). Das PIN Plugin nutzt das z.B (PIN Eingabe und Statusmeldungen).


    Ansonsten, wie schon erwähnt alle Fragen/Infos innerhalb eines offenen OSD (Timer löschen, Aufnahmen löschen, Schnitt beendet Info usw.)


    cu


  • Versuch mal, durch Zifferneingabe auf einen Kanal zu schalten, der nicht verfügbar ist (z.B. weil er verschlüsselt ist).
    Dann wird in die laufende Kanalanzeige bei der LCARS-Skin unten "Channel not available!" eingeblendet.


    Klaus

  • Ahhh jetzt ja...irgendwie habe ich die Antwort von Maniac überlesen. Danke auch an KeineAhnung und kls für die Erklärungen, jetzt kann ich das mal testen. :)


    Witzigerweise ist es mir eben beim Löschen einer Aufnahme selbst gedämmert...


    Ciao Louis

  • Moin,


    ich muss diesen Thread nochmal hochholen...mit einem minimal anderen Thema :)


    Der Konstruktor der Klasse cDisplayChannel wird ja mit dem boolschen Parameter "WithInfo" aufgerufen...im Code steht, dass darüber angegeben wird, ob EPG Informationen mitgegeben werden oder nicht:


    Code
    virtual cSkinDisplayChannel *DisplayChannel(bool WithInfo) = 0;
           ///< Creates and returns a new object for displaying the current
           ///< channel. WithInfo indicates whether it shall display only
           ///< the basic channel data, or also information about the present
           ///< and following EPG event.


    Nur die Frage: in welcher Situation wird WithInfo == false mitgegeben? Wenn z.B. mit links / rechts zwischen den Kanalgruppen umgeschalten wird, ist WithInfo auch true.


    Vielleicht kann mir da jemand nochmal auf die Sprünge helfen...danke schonmal!


    Ciao Louis


  • grep -w DisplayChannel *.c


    liefert


    Code
    menu.c:  displayChannel = Skins.Current()->DisplayChannel(withInfo);
    menu.c:     DisplayChannel();
    menu.c:  displayChannel = Skins.Current()->DisplayChannel(withInfo);
    menu.c:void cDisplayChannel::DisplayChannel(void)
    menu.c:  DisplayChannel();
    skinclassic.c:cSkinDisplayChannel *cSkinClassic::DisplayChannel(bool WithInfo)
    skinlcars.c:cSkinDisplayChannel *cSkinLCARS::DisplayChannel(bool WithInfo)
    skinsttng.c:cSkinDisplayChannel *cSkinSTTNG::DisplayChannel(bool WithInfo)


    Also schau dir mal an, wie "withInfo" in menu.c ermittelt wird.


    Klaus

  • Hi Klaus,


    danke für die schnelle Antwort....das in menu.c


    Code
    withInfo = !Switched || Setup.ShowInfoOnChSwitch;


    habe ich auch schon gesehen, aber so richtig schlau bin ich noch nicht daraus geworden. Jetzt habe ich nochmal drüber nachgedahct und es wohl verstanden...wenn man "Ok" drückt, also die ChannelInfo aufruft ohne umzuschalten, wird die EPG Info immer gezeigt, beim Umschalten aber nur, wenn Setup.ShowInfoOnChSwitch auf true steht. Dann ist withInfo auch immer true. Diese Option kannte ich gar nicht...wer will denn sowas?! :)


    Ciao Louis

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!