Menu Fantastic Plugin 0.1.2 by gutemine

  • das Menu Fantastic verwendet für die Unternenus die nackte ChoiceBox und die ist nicht wirklich skinnbar, insofern wirst du da wenig erfolg haben.


    LG
    gutemine

  • ist es möglich die choicebox auch direkt für das hauptmenu einzusetzen?


    in def __init__

    Code
    self.skin = Fantastic.skin


    mit

    Code
    self.session.openWithCallback(self.FantasticMenuSelected,ChoiceBox,mfmenudescr,self.ListMenuFantastic())


    ersetzen oder wird das nicht reichen?


    p.s.: welches argument würde den title an die choicebox weiterreichen? die choicebox akzeptiert ja an sich einen "Input"

  • ja, schon aber da ist extra das mainmenu verwendet damit der skin greift und man wenigstens grösse und position anpassen kann.


    LG
    gutemine


    PS: wenn du einen skinn verstehst könntest du dir gleich ein ordentliches plugin schreiben statt das MF aufzubohren (siehe es dann asl coedebeispiel für die verwendung von choicebox, messagebox, consolebox,... Die ganzen menu.cfg sind zwar leicht zu verwenden, aber dadurch hat es halt auch seine limitierungen

    3 Mal editiert, zuletzt von gutemine ()

  • hatte ich teils schon, aber es gab da ein problem. ausserdem ist dein plugin spitze. die ganze menu integrierung ist ideal, weil fast alles bei mir auf shell basiert.


    nur den skin würde ich gerne tweaken.


    noch besser, wenn ich statt der ChoiceBox den von dir eingebauten Skin benutzen könnte. Dann wäre es einheitlich, egal welchen skin man drauf hat.

  • na ja eigentlich ist es andersrum, das für die choicebox die globalen skin einstellungne greifen soltlen, damit diese auch von dort skinnable sind und an das look & feel des jeweiligen skinn angepasst werden können - aber wie gesagt, viel geht da eh nicht :)


    Fettdruck und andere farben habe ich mir auch schon gewünscht, aber das spielt es halt nicht :frowning_face:


    Und ja, das MF ist eigentlich als python shellwrapper entstanden...


    Natürlich kannst du auch im Hauptmenu schon die Choice box verwenden, das ist nur cut & paste in plugin.py aber so gefiel es mir halt besser, und verhindert auch das readme.txt und about unterdrückt werden können - weil hardcoded :)


    Auf den shift+farbtasten mit color.cfg kannst du aber auch direkt in ein menu springen, da siehst du wie das geht.


    LG
    gutemine

    Einmal editiert, zuletzt von gutemine ()

  • ich glaub ich wär zufrieden, wenn er in deinem skin bleibt und die untermenus in deinen skin aufruft.


    muss ja nicht schick sein. mit eigenem title ist schon ok. ausserdem kann man ja Pixmaps einbauen. Bildchen hab ich also schon in dein hauptmenu eingebaut. theoretisch kann ich damit auch skin rahmen etc. basteln.
    wenn ich den titel ausblende sowieso. ich glaub da kann man schon einiges machen, nur halt etwas weniger komfortabel.


    aber wie kriege ich die untermenus dazu den skin des hauptmenu aufzurufen?


    hab versucht in def FantasticMenu(self,status): die zeile

    Code
    self.session.openWithCallback(self.FantasticMenuSelected,ChoiceBox,mfmenudescr,self.ListMenuFantastic())


    mit

    Code
    self.session.openWithCallback(self.FantasticMenu(""),mfmenudescr,self.ListMenuFantastic())


    zu ersetzen, aber das was offensichtlich nicht.


    könntest du mir da weiterhelfen? soll einfach nur für die untermenus den skin des hauptmenus benutzen :331:

  • ich glaube für das ausgeben des LCD habe ich auch in der unterclasse eine eigene skin variable verwendet - um dort den LCD Text positionieren zu können


    Und withCallback nur mit Callback routine aufzurufen ohne etwas das wenn es fertig ist diese aufrufen soll (weil die parameter dann weiterrutschen) kann nicht gut gehen, du müsstest wenigstens deine eigene routine rein tun, dort skin definieren und evt die ChoiceBox dann aufrufen - vieleicht gehts, vieleicht auch nicht.


    ob das mit der ChoiceBox auch geht um wenigstens position und farbe anzupassen weis ich aber nicht mehr - das MF habe ich schon fast 1 jahr nur für Kleinigkeiten angegriffen


    Du kannst es aber gerne ein bischen aktualisieren, optimieren und neue version machen, die anderne Freuen sich sicher :)


    Das einzige wirklich lustige beim MF zu machen war die simple art command line interpretor für die *.cfg files


    das mit dem : und splitten der textstrings zu machen statt sich lange mit einem xml oder ähnlichem zu qälen war eigentlich auch das einzige wirklich kreative dran


    genau das macht halt den leuten das menu schreiben leicht, weswegen es immer noch recht beliebt ist - weil cut & paste von zeilen und nur text ändern ist halt simpler als sich mit spitzen klammern oder gleich dem python zu qälen, und beispiele sind ja genug dabei.


    LG
    gutemine

    3 Mal editiert, zuletzt von gutemine ()

  • nur damit ich nicht noch an der falschen stelle suche, ich sehs doch richtig, dass ich einzig def FantasticMenu(self,status): anpassen muss?


    oder muss ich def FantasticMenuSelected(self,mfselected): anpassen? oder beide?


    ersteres ist zumindest das einzige mit einer ChoiceBox referenz.

  • In der FantasticMenu wird das menu file gelesen und dann die ChoiceBox mit FantasticmenuSelected als Callback aufgerufen, wenn du dort statt ChoiceBox was anderes aufrufst das eben wieder eine skin variable enthält und einen skin lädt so ähnlich wie die FantasticLCD routine das macht könnte dieser auch greifen - vieleicht :)


    Trotzdem werden aber nur wenige der üblichen skinn attribute greifen weil vom aussehen der ChoiceBox eben sehr viel C++ teil vom enigma2 hardcoded ist, bzw. einnfach vom standardskinn übernommen wird.


    Und ein ukepg gibts im standard MF nicht, ich weis das aber gemoddede versionen davon im Umlauf sind wo auch andere Sachen reingepackt wurden


    LG
    gutemine


    PS: Kleiner tipp noch - das Extensions menu auf der Blauen taste ist auch eine ChoiceBox wenn ich mich recht erinnere, schau dir in den verschiedenen skinns an was daran gemodded wird, dann siehst du was machbar ist und was nicht - und nicht vergessen, mit python kenne ich mich eigentlich gar nicht aus :)

    4 Mal editiert, zuletzt von gutemine ()

  • garnicht so einfach.


    lcd wird scheinbar einfach mit

    Code
    self.session.openWithCallback(self.FantasticMenu(""),FantasticLCD,mftextargument)

    aufgerufen, wenn ich das richtig sehe und ist definiert mit

    Python
    def __init__(self, session, title = "LCD Text"):


    die choicebox mit

    Code
    self.session.openWithCallback(self.FantasticMenuSelected,ChoiceBox,mfmenudescr,self.ListMenuFantastic())


    in

    Python
    class Fantastic(Screen):
        skin = """
            <screen position="100,100" size="500,400" title="Fantastic" >
            </screen>"""
            
        def __init__(self, session, args = 0):
            self.skin = Fantastic.skin
            self.session = session
            Screen.__init__(self, session)
            self.menu = args


    müsste man doch eigentlich dann nur exakt argumente an den screen melden. self und session, richtig? nur was sind die beiden?
    self = self.FantasticMenuSelected
    session = mfmenudescr
    ???



    wenn ich nämlich einfach choicebox ersetze und sonst nix ändere (übergebene argumente o.ä) krieg ich mal gleich nen GS beim untermenu-aufruf

  • Zitat

    Original von gutemine
    Und ein ukepg gibts im standard MF nicht, ich weis das aber gemoddede versionen davon im Umlauf sind wo auch andere Sachen reingepackt wurden


    nene, ist schon dein original aus diesem thread. hatte den namen nur an der stelle vorher mal geändert und vergessen hier zurück zu ändern.


    ist nach wie vor dein skritp.

  • kriegs leider nicht alleine hin :frowning_face:


    hab deinen default nun komplett angepasst. wenn es jetzt noch irgendwie möglich wäre nicht die choicebox aufzurufen....


    weiss jemand rat?

  • ich verstehe nicht ganz dein problem, natürlich kannst du statt der ChoiceBox auch so wie in der Hauptclasse mit einer ActionMap und dem MenuList arbeiten 8und das wäre dann sofort skinnable - das beispiel dazu ist ja eh im Hauptmenu ersichtlich.


    Das schöne an der ChoiceBox ist halt das die sich dynamisch anpasst, abhängig von der anzahl der menueinträge. länge der texte, automatische keys von 1..9 und dan farbtasten für die direktanwahl der menupunkte, .. und das verlierst du dann halt bzw. musst dich selber drum kümmern

  • ich nochmal :)


    so ein ärger.
    ich hatte alles fix und fertig und hab mein fertiges plugin dann versehentlich gekillt und musste nun alles wieder herstellen.


    mein letztes problem ist nun nur noch der aufruf des plugins via fantastic menu.


    rufe ich mit der option "E:blah:blah.sh" auf, dann läuft es nicht. Rufe ich mit "C:blah:blah.sh" auf dann läuft es.
    Ich kann mich nicht mehr erinnern, was ich damals benutzt hatte.


    Das Programm muss sozusagen im Hintergrund weiter überwacht werden. Sprich wenn man es z.b. per telnet öffnet und dann telnet-konsole schliesst, dann bricht das programm ab.


    deshalb läuft es vermutlich mit C: da hierbei eine konsole offen bleibt.


    kann man das irgendwie anders erreichen, ohne die console dauerhaft einzublenden? sozusagen im hintergrund aber ohne es zu schliessen?

  • Shit happens :)


    A: gäbe es noch, evt. mit einem & dran, das ist dann nur ein application container.


    Aber die idee der console ist halt das es wartet bis du fertig ist.


    Du kannst es zwar mit den nohup binary (ist im orwell dabei) auch als dameon starten (schau dir im orwell plugin an wie es benutzt wird) aber wirklich schön ist das auch nicht.


    LG
    gutemine

    Einmal editiert, zuletzt von gutemine ()

  • A: funktioniert leider nicht. führt zum crash


    EDIT: habs jetzt aber wieder hingekriegt. bin nochmal die verfügbaren optionen aus dem skript durchgegangen.

  • kann sein das es crashed, an den application containern hat sich im CVS einiges getan, na ja vieleicht wenn ich mal zeit habe es mir anzusehen/es zu fixen


    Aber du hast jetzt einen meiner Lieblingssprüche entdeckt:


    Irgendwie geht es immer (weiter)


    LG
    gutemine

    2 Mal editiert, zuletzt von gutemine ()

  • ich versuche mich gerade erneut am FM, bietet ja ein großes Feld an Möglichkeiten


    was ich absolut nicht gebacken bekomme (geht es denn überhaupt?):


    wenn ich ein Plugin aufrufe, z.B.:

    Code
    elif mftextargument == "Cronmanager":
                        self.session.openWithCallback(self.FantasticMenu(""),Cronmanager)


    wie kann ich veranlassen, das sich dabei FM gleich beendet? Also nach dem beenden des Cronmanager will ich nicht zurück ins FM sondern alles beendet haben

  • habe ich gemacht, wenn ich das aufgerufene Plugin beende, habe ich dennoch das FM-Menü wieder da


    edit: ein self(close) dahinter wirkt Wunder :winking_face:


    aber doch noch ne Frage: im Gegensatz zu einem anderen Schreiber möchte ich bei Direktaufruf eines Menüs (z.B. green.cfg) gerne die Choicebox haben, wegen der direkten Wahlmöglichkeit per Zahlentaste. Ich habe ne ganze Weile dran rumgedoktert, bekomme es aber einfach nicht hin (Problem: irgendwas mit modal, soweit ich es verstehe = keine ChoiceBox wenn der Hauptscreen nicht fertig ist?)

    Einmal editiert, zuletzt von shadowrider ()