Was ist die Rolle des "Interaktions-Fokus"?
Die Aktionen der Nutzer der WIM-App sind oftmals auf eine ganz bestimmte (dargestellte) Komponente gerichtet. Wenn es beispielsweise mehrere Eingabefelder für Texte gibt, muss eines - und genau eines - von ihnen die eingegebenen Zeichen aufnehmen. Diese Darstelllungskomponente hat den "Interaktions-Fokus", weil sich alle Nutzer-Aktionen, bei denen nicht explizit etwas anderes bestimmt wird, auf diese Komponente beziehen.
Der Interaktions-Fokus muss nicht immer ein Texteingabefed, Auslöse-"Knopf", Auswahlliste etc. sein, sondern kann auch durch einen ausgewählten Textbereich, eine ausgewähltes Listenelement etc. repräsentiert werden.
Weiterhin kann sich ein Teil der Nutzer-Aktionen auf einen sehr kleinen "fokussierten" Bereich beziehen, ein anderer Teil der Nutzer-Aktionen auf einen umfassenderen Bereich und ein weiterer Teil der möglichen Nutzeraktionen auf einen noch umfassenderen Bereich beziehen.
So kann sich eine per Tastatur ausgelöste Aktion (beispielsweise die Umschaltung der Schriftstärke) auf den selektierten Text beziehen, während sich eine Einrückungs-Aktion auf das Listenelement, in dem sich der selektierte Text befindet, wirkt. Eine vertikale Scroll-Aktion wirkt hier jedoch auf das Darstellungsfenster des selektierten Textbereichs, in dem sich die dargestellte Liste mitsamt ihrem Textumfeld befindet, eine horizontale Scroll-Aktion kann dagegen einen ganzen (Teil-) Darstellungsbereich auswechseln und eine weitere andere Tastatureingabe kann beispielsweise die Darstellungsgröße sämtlicher Zeichen beeinflussen.
Der "Fokus" liegt also nicht unbedingt ausschließlich bei einem "kleinen" fokussierten Bereich, sondern letztlich bei einer "Hierarchie" von Darstellungs-Elementen. Beginnend beim detailliertesten fokussierten Darstellungselement werden die Aktionsanforderungen also an die jeweils nächst-umfassendere Komponente weitergegeben, falls die detailliertere Komponente nicht dafür zuständig ist.
Interaktions-Ereignisse werden meist "global" vom APP-Modul registriert und in das WIM-System eingebracht. Daher muss - beginnend beim APP-Modul - der "Fokus-Pfad" zur detailliertesten Fokussierung gekennzeichnet sein und stets aktualisiert gehalten werden, damit die Ereignisbearbeitung an das zuständige Modul delegiert werden kann.
Damit die Nutzer wissen, wo sich der aktuelle Interaktions-Fokus gerade befindet, sollte diese Komponente optisch gut erkennbar gekennzeichnet sein. Bei Eingabefeldern geschieht dieses oft durch einen farbigen Rahmen.
Die jeweils gerade aktive fokussierte Komponente sollte immer für die Nutzer sichtbar sein. Sie kann aber Umstände halber beispielsweise auch mal aus den sichtbaren Bereich heraus gescrollt sein. Dann muss die Komponente aber bei der nächsten relevanten Aktion wieder in den sichtbaren Bereich zurückgebracht werden. Daher wird von den Fokussierungen bei Bedarf die Visualisierungs-Mimik des Systems aufgerufen.
Welche Schritte werden bei einer Änderung des Interaktions-Fokus durchlaufen?
- Ein Modul stellt fest, dass ein bestimmtes Modul den Interaktions-Fokus haben sollte. Diesem Modul wird dann ein "DenandFocus" EVENT-Request zugeschickt.
- Beim Eintreffen eines "DemandFocus"-Request (oder ggf. auch anderer Ereignisse) sendet das in den Fokus zu rückende Modul an sein einbettendes Modul einen "FocusMe"-EVENT-Request.
- Falls das Modul, das einen "FocusMe"-Request von einem seiner einbettenden Modul erhält, bereits im aktuellen Fokus-Strang steht, schickt es seinerseits einen "FocusMe"-Request an sein einbettendes Modul weiter.
- Ist das Modul, das den "FocusMe"-Request bereits aktuell im Fokus-Strang, entzieht es demjenigen seiner eingebetteten Module, das momentan ebenfalls im Fokusstrang enthalten ist, den aktuellen Fokus-Status. Dazu wird ihm der Vorgabe-Parameter "Focus" auf den Wert "false" (= 0) gesetzt und via TARGETS-Request (auf dem üblichen Wege) mitgeteilt.
- Dann wird für das Modul, das den Fokus angefordert hat, der "Focus"-Parameter auf den Wert "true" (1) gesetzt und per TARGETS-Request mitgeteilt.
- Erhält ein Modul eine Vorgabe "Focus=0", gibt es eine eben-solche Vorgabe an dasjenige seiner eingebetteten Module weiter, das den aktuellen (Unter-) Fokus besitzt, weiter.
Die von der Fokus-Rücknahme betroffenen Module müssen ggf auch noch andere Aktionen durchführen. Alle gemeinsam müssen aber den "focused"-Klassen-Bezeichner (class="focused") bei ihrem zugeordneten DOM-Element entfernen. Dadurch kann mit Hilfe von CSS-Regeln das Erscheinungsbild der Modul-Darstellung verändert werden. - Bekommt ein Modul den Interaktions-Fokus durch die Parameter-Vorgabe Focus="1" zugeteilt, gibt es eine eben-solche Vorgabe an dasjenige seiner eingebetteten Module weiter, das einen Fokus angefordert hat.
Weitere Aktionen können beim spezifischen Modul nötig sein. Von allen Modulen ist jedoch der Klassen-Parametername "focused" bei ihrem zugeordneten DOM-Element zu setzen. - Dasjenige eingebettete Modul, das den Fokus erhält, aber seinerseits nicht mehr an ein beim ihm eingebettetes Modul weitergeben kann, muss abschließend Sichtbarmachung anfordern und einen "ShowMe"-EVENT-Request an sein einbettendes Modul senden. Der Fokus muss ja von den Nutzern verlässlich bemerkt werden können.
