VirtualListCtrl + MVP-Pattern

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Hallo,

ich versuche gerade, das MVP-Pattern auf ein Projekt mit wxPython-GUI anzuwenden. Dabei scheine ich im Augenblick an der etwas unhandlichen API von wxwidgets zu scheitern. Ich habe mal einen Dummy geschrieben, um das Verhalten auszutesten:

http://paste.pocoo.org/show/160130/

Den Kram mit itemDataMap und ColumnSorterMixin erst einmal nicht beachten, das ist dann die nächste Eskalationsstufe. Im Moment wird in jede Zelle 'None' geschrieben weil das der Rückgabewert der Methode OnGetItemText im ListCtrl ist. Der Rückgabewert müßte dann am Ende der entsprechende Wert aus 'datasource' sein.

Wenn ich der Liste eine Referenz auf 'datasource' mitgebe, ist das auch alles kein Problem. Interessant wird es jetzt, wo ich versuche, das MVP-Pattern anzuwenden. Kurz gesagt: Der Presenter ist für die Programmlogik (also auch das Bereitstellen von Daten) zuständig. Zwischen dem Presenter und dem View (Frame, ListCtrl) hängt noch der Interactor, der die wxEvents in Methodenaufrufe auf dem Presenter umsetzt. Idealerweise hat View keinerlei Kenntnis von der Existenz von Presenter und Interactor. Die Kommunikation erfolgt rein über Events.

Nun ist es kein Problem, den Aufruf von OnGetItemText in ein Event umzuwandeln und hochzureichen. Aber auf diesem Weg geht natürlich der Rückgabewert verloren. Natürlich kann ich Presenter.get_data den Text einer Zelle nachträglich korrigieren lassen, aber das ist meiner Meinung nach nicht unbedingt schön.

Kennt jemand eine elegante Lösung für dieses Problem? Bzw. kann mir jemand sagen, ob sich MVP mit PyGTK besser realisieren ließe?
Antworten