Verletzung der Plugin-Schnittstelle

Hier haben Plugin-Entwickler die Möglichkeit, sich auszutauschen.
pck
Plugin-Developer
Beiträge: 108
Registriert: 26 Jan 2005, 08:59
Wohnort: Ilmenau
Kontaktdaten:

Beitrag von pck »

Til hat geschrieben:@pck: Die Sache mit den "gebundenen" und "ungebundenen" Methoden kapier jetzt nicht so ganz. Erklär's doch bitte nochmal für Dumme... :wink:
Ich hatte gehofft mein Wunsch nach eigenen "Defaultaktionen" wäre verständlich wenn man mein Plugin mal angeschaut hat, selbst wenn man die Begriffe aus dem Lambda-Kalkül nicht kennt. Sorry. Meine Formulierung "gebundene Methoden" ist zudem schwammig. Korrekt wäre "Funktionen ohne freie Variablen". Ich erklär's mal an einem Beispiel:

Code: Alles auswählen

Plugin plugin = new ListViewPlugin();
Action action = manager.getActivatedPlugins()[0].getContextMenuActions(program).getAction();
PluginManager manager = getPluginManager();

plugin.execute(program); // A
action.actionPerformed(); // B
manager.handleProgramDoubleClick(program); // C
Die Zeilen A, B und C machen in etwa dasselbe. Alle führen die Funktion "Plugin.execute(Program)" aus. (Stimmt nicht ganz, aber tun wir mal so als ob.) Die Funktion hat zwei Variablen, ein Plugin namens "this" und eine Sendung namens "program".

In Zeile "A" kann man "this" (=plugin) und "program" angeben. Man spricht von "freien Variablen".

In Zeile "B" hat man keinen Einfluss darauf, welches Plugin welches Programm bearbeitet. Die Variablen "this" und "program" sind "gebundene Variablen".

In Zeile "C" ist "this" eine "gebundene Variable" und "program" eine "freie Variable".


Mit TVB1.0.1 kann ich alle Plugins wie in Zeile "A" aufrufen. Das wird in TVB1.1 nicht gehen und das ist sicher auch gut so.

In TVB1.1 kann man alle Plugins wie in Zeile "B" aufrufen. Das ist meist ok, aber der Benutzer muss bei jedem Aufruf erneut auswählen was er tun will.

Ich würde in TVB1.1 gerne die wichtigsten Pluginaktionen wie in Zeile "C" aufrufen können. Wenn der Benutzer eine Funktion häufig aufrufen will, dann braucht er nicht jedesmal ein Kontextmenü zu nutzen.
Benutzeravatar
Til
Site Admin
Beiträge: 1498
Registriert: 04 Dez 2003, 11:21
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von Til »

Wir haben die Methode getContextMenuActions(Program) mit Absicht so entworfen, dass die Aktionen vom Program abhängen.

Damit ist es möglich, je nach Program zu entscheiden, welche Aktionen möglich sind. Beispiel: Das Lieblingssendungen-Plugin kann bei einer Sendung, die noch keine Lieblingssendung ist die Aktion "Zu Lieblingssendungen hinzufügen" anbieten. Bei einer Sendung, die bereits Lieblingssendung ist, kann die Aktion "Aus Lieblingssendungen entfernen" angeboten werden. Um so etwas zu ermöglichen, muss also eine Aktion an ein Program gebunden sein.

Bei deiner Variante gehst du davon aus, dass jede Aktion mit jedem Program ausführbar ist.
pck
Plugin-Developer
Beiträge: 108
Registriert: 26 Jan 2005, 08:59
Wohnort: Ilmenau
Kontaktdaten:

Beitrag von pck »

Til hat geschrieben:Bei deiner Variante gehst du davon aus, dass jede Aktion mit jedem Program ausführbar ist.
Klingt "die wichtigsten Pluginaktionen" für dich nach "jede Aktion"?
pck
Plugin-Developer
Beiträge: 108
Registriert: 26 Jan 2005, 08:59
Wohnort: Ilmenau
Kontaktdaten:

Beitrag von pck »

Til hat geschrieben:Das Lieblingssendungen-Plugin kann bei einer Sendung, die noch keine Lieblingssendung ist die Aktion "Zu Lieblingssendungen hinzufügen" anbieten. Bei einer Sendung, die bereits Lieblingssendung ist, kann die Aktion "Aus Lieblingssendungen entfernen" angeboten werden. Um so etwas zu ermöglichen, muss also eine Aktion an ein Program gebunden sein.
Und ... verstehe ich richtig, das du es für einen Bug in 1.1cvs hältst, dass man unter Aussehen->Kontextmenü->SelektiertesPluginMitDoppelklickAusführen auch das FavoritesPlugin auswählen darf?
pck
Plugin-Developer
Beiträge: 108
Registriert: 26 Jan 2005, 08:59
Wohnort: Ilmenau
Kontaktdaten:

Beitrag von pck »

Naja ... brauchst nicht zu antworten. Du hast richtig verstanden was ich vorhabe und wenn ihr hier keine offizielle saubere Schnittstelle wollt finde ich das schade aber es ist kein Beinbruch.
Benutzeravatar
Til
Site Admin
Beiträge: 1498
Registriert: 04 Dez 2003, 11:21
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von Til »

pck hat geschrieben:
Til hat geschrieben:Bei deiner Variante gehst du davon aus, dass jede Aktion mit jedem Program ausführbar ist.
Klingt "die wichtigsten Pluginaktionen" für dich nach "jede Aktion"?
Von mir aus gehst du halt davon aus, dass "die wichtigste Pluginaktion" mit jedem Program ausführbar ist. Leider ist auch das mit dem neuen Ansatz nicht gegeben.

Beim Lieblingssendungenplugin ist die wichtigste Aktion zweifelsohne "Zu Lieblingssendungen hinzufügen". Die macht halt bei einer Sendung, die bereits Lieblingssendung ist keinen Sinn.
Benutzeravatar
Til
Site Admin
Beiträge: 1498
Registriert: 04 Dez 2003, 11:21
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von Til »

pck hat geschrieben:Und ... verstehe ich richtig, das du es für einen Bug in 1.1cvs hältst, dass man unter Aussehen->Kontextmenü->SelektiertesPluginMitDoppelklickAusführen auch das FavoritesPlugin auswählen darf?
Mann, mann. Also entschuldige, wenn ich das mal so sage, aber du bist in manchen Dingen ganz schön kleinkariert...

Nein, es ist kein BUG. Es gibt im PluginManager eine Methode "getExampleProgram", die das Program zurückgibt, die von dieser Auswahl genutzt wird, um die Aktionen zu bestimmen. Ein Plugin kann damit dann "typische" Aktionen zurückgeben. Klar kann es dann passieren, dass die gewählte Defaultaktion nicht auf jedes Program anwendbar ist. Dann passiert halt nichts bei nem Doppelklick.
pck
Plugin-Developer
Beiträge: 108
Registriert: 26 Jan 2005, 08:59
Wohnort: Ilmenau
Kontaktdaten:

Beitrag von pck »

Til hat geschrieben:Beim Lieblingssendungenplugin ist die wichtigste Aktion zweifelsohne "Zu Lieblingssendungen hinzufügen". Die macht halt bei einer Sendung, die bereits Lieblingssendung ist keinen Sinn.
Wenn es in TVB1.1 eine saubere Schnittstelle gäbe die "Aktionen ohne Programm" zurückliefert dann könnte der Benutzer hier einfach "Lieblingssendung hinzufügen/entfernen" auswählen. Das wäre sogar eleganter als der Ist-Zustand bei TVB1.0.1.

Ohne eine Schnittstelle kann der Benutzer bei mir nur "Aktion 1 / FavoritePluginId" auswählen und ich kann vielleicht "'BeispielTitel" zu Lieblingssendungen hinzufügen" als Hinweis auf die eigentliche Funktion anzeigen. Das ist natürlich Suboptimal, aber bevor wir hier noch länger diskutieren ...
Antworten