On Thursday 25 January 2007 17:58, Christian Stimming wrote:
[...]
> Ich halte das für ein GUI-Programm schon aus Prinzip für den falschen
> Ansatz. Die App hat nun mal viele verschiedene Fenster. Bei
> Benutzer-Rückfragen kann irgendeines der existierenden Fenster das
> jeweilige parent-window sein, inklusive jeweiliger Zuständigkeit fürs
> Löschen. Ich erwarte von einem callback-Objekt wie GWEN_GUI, dass ich im
> callback-Objekt abspeichern kann, zu welchem konkreten parent-window
> dieses callback-Objekt denn nun gehört. Das bedeutet zwangsläufig, dass
> das callback-Objekt eben keine zentrale Instanz ist, sondern dass es
> potentiell mehrere davon geben kann. Darin sehe ich genau die
> Wirklichkeit repräsentiert, nämlich die Existenz vieler verschiedener
> Fenster.
[...]

Na und? Das ist Dir doch weiterhin unbenommen? Du kannst doch immer noch 
mehrere Fenster gleichzeitig offenhaben? Und welches Fenster das jeweilige 
Parent-Window eines eventuell angezeigten Widgets ist, hat doch nichts mit 
den GWEN_GUI-Funktionen zu tun?

Wie beschrieben erzeuge ich bei GWEN_Gui_ProgressStart() ja auch meine 
internen eigenen Progress-Objekte, und merke mir zu denen auch - innerhalb 
dieser Objekte - welches Widget dazu gehoert. Das kannst Du ja genauso 
machen. Es ist nur nicht Aufgabe der Schnittstelle von den Plugins zum GUI 
sich zu merken, wer wann wie welches Widget erzeugt.

Das Plugin sagt nur: "Ich beginne jetzt eine Operation mit so und so vielen 
Schritten, und werde Dir ab und zu sagen, wenn ich einen Schritt weiter bin 
(werde Dir dazu auch jeweils die ID mitteilen). Ausserdem werde ich eventuell 
noch ein paar Logmeldungen ausgeben. Zeig das dem Benutzer."

Wie Du das in der GUI dann darstellen willst, ist doch Deine Sache?? Die 
Funktion GWEN_Gui_ProgressStart() muss eine ID zurueckgeben, das ist die 
einzige Forderung vom Plugin. Was da im einzelnen dahintersteckt, 
interessiert das Plugin ueberhaupt nicht. Das Plugin wird nur diese ID im 
weiteren verwenden, um darauf zu referenzieren, beispielsweise bei 
GWEN_Gui_ProgressEnd().

Mit der statischen Variable wird also in keinster Weise festgelegt, welches 
Widget wann wie von wem dargestellt wird (oder aber nicht dargestellt wird), 
oder wer wessen Parent ist. Es gibt nur eine zentrale Stelle, an der der 
Anwendung *gemeldet* wird, dass irgendein Plugin (oder wer auch immer) eine 
Operation startet.

Wenn Du also weitere Informationen zum Progress-Objekt ablegen willst: Das 
kannst Du doch weiterhin machen, wie Du lustig bist. Entscheidend fuer das 
Plugin ist nur die ID.

Das GUI-Interface geht ja sogar so weit, dass es selber ueberhaupt keine 
Progress-Objekte definiert. Da ist die Anwendung voellig frei. Ich fuer 
meinen Teil verwende Progress-Objekte (wie beschrieben), und das muesstest Du 
sicher auch tun, wenn Du Dir jeweils die Parent-Widgets etc merken willst.

[...]
> Warum denn nicht? Es kann doch durchaus ein AB_Banking-Objekt mit einem
> Dateiimport beschäftigt sein (von parent-window W1 aus) und ein weiteres
> mit einem HBCI-Saldoabruf (von parent-window W2 aus). Diese beiden
> Aktionen würden sich nicht einmal auf Ebene der config-Datei in die
> Quere kommen. Die einzigen wirklich zu vermeidenden parallelen Instanzen
> sind Schreibzugriffe auf die Dateien - und dafür gibts ja die lockfiles.
[...]
Und das kannst Du weiterhin machen, wenn Du willst. Die GWEN_GUI-API trifft 
darueber ueberhaupt gar keine Aussagen, verbietet es also auch nicht.

[...]
> Klingt für mich eher so, dass du die Phantasie der Anwender und der
> anderen Programmierer etwas unterschätzt. Solange es keinen technischen
[...]
Das ist ja nun wirklich Unsinn. Ich bin selber Programmierer, und inzwischen 
ebenfalls einige Jahre dabei. Ich habe dabe genuegend Dinge gesehen, die mich 
sicher nicht gelehrt haben, zu unterschaetzen, was Programmierer alles mit 
einer API anstellen koennen :-)

[...]
> > Der Sinn von GWEN_GUI ist ja gerade, nur eine Stelle zu haben, an der
> > Benutzerinteraktion von der Anwendung abgefangen werden muss.
> > Die Anwendung erklaert alleine und zentral, wie die Interaktion
> > ausgefuehrt werden soll,
>
> Aber da ist GWEN_GUI die falsche Stelle dafür! Die App hat durchaus so
> eine zentrale Instanz, aber das ist die event-loop des darunterliegenden
> Toolkits. Alles, was darüber kommt, sollte eine Parallelität erlauben.
[...]
Wie beschrieben: Die API verbietet ueberhaupt nicht die parallele Ausfuehrung.

[...]
> Du willst nur genau ein progress-Fenster offen haben? Dann mag das ja
> gehen. Aber das war nicht mein Beispiel in meiner vorigen Mail. Da
> redete ich von zwei parallelen AB_Banking-Aktionen, die jeweils
> unterschiedliche parent-windows haben. In deinem Beispiel ist also das
> erste progress-Objekt mit parent-window W1 aufgemacht worden, und jetzt
> wird ein zweites mit einem anderen parent-window aufgemacht - das geht
> jetzt doch gar nicht.
[...]
Nein, ich will nicht API-gemaess nur ein Fenster auf haben. Ich selbst will 
natuerlich schon moeglichst viele Progress-Stufen in einem Fenster sammeln, 
aber das ist eben *meine* Implementierung. Das ist nicht in der API von 
GWEN_GUI festgelegt.

[...]
> Das muss doch nicht eine Verbindung von AB_BANKING und GWEN_GUI
> bedeuten. Ich geh nur auf die Barrikaden wegen der statischen Variable
> anstelle eines jeweils übergebenen pointers. Also in einem
> GWEN_CryptToken dann eben anstelle GWEN_GUI_msgBox("foo", "bar");
> stattdessen GWEN_GUI_msgBox(gui_object, "foo", "bar"); und das
> gui_object muss dann eben vorher bei dem Aufruf des GWEN_CryptToken mit
> übergeben worden sein. Ein kleines bisschen mehr Schreibarbeit, aber nun
> wirklich kein technisches Hindernis.
[...]

Von wegen "ein kleines bischen"...
Das CryptToken - wie jedes andere Plugin - interessiert sich ueberhaupt nicht 
fuer den Pointer. Dennoch muesste es diesen Pointer vor allem bei jedem 
Funktionsaufruf mitfuehren (als Argument). Und das gilt nicht nur fuer das 
CryptToken: Auch alle Gwen-Module, die ProgressStart() verwenden, muessten in 
den Funktionen einen Pointer auf das GUI-Objekt haben. Und genauso die 
Funktionen in Libchipcard. Das macht fuer mich einfach keinen Sinn, weil der 
theoretische Mehrwert, den man sich vielleicht ueberlegen koennte, diese 
Nachteile einfach nicht aufwiegt.


Gruss
Martin



-- 
"Things are only impossible until they're not"

AqBanking - http://www.aqbanking.de/
LibChipcard - http://www.libchipcard.de/

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Aqbanking-devel mailing list
Aqbanking-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/aqbanking-devel

Reply via email to