Realizacja:
Domyślnie dostępne są wszystkie komendy zdefiniowane w prezenterze
(p. Presenter>>queryCommand:) i oczywiście niezdefiniowane komendy są niedostępne.
Jeśli chcemy warunkowo zezwalać na wykonywanie pewnych komend, to
musimy zdefiniować (w tworzonym Prezenterze) metodę queryCommand:.
Ta metoda dostaje jako parametr obiekt opisujący komendę. Metoda command
tego obiektu daje (jako Symbol) nazwę komendy. Dla tych komend, których
dostępność chcemy zmieniać, należy skorzystać z metody enabled: w celu
poinformowania interfejsu, czy w obecnej sytuacji te komendy są dostępne.
Oto przykładowa definicja metody queryCommand wzięta z załączonego do Dolphina przykładowego programu (Education Center->Dolphin Tutorials->Personal Money Application):
queryCommand: aCommandQuery "Enters details about a potential command for the receiver into aCommandQuery" super queryCommand: aCommandQuery. (#(editTransaction removeTransaction) includes: aCommandQuery command) ifTrue: [ aCommandQuery enabled: self hasSelectedTransaction ]
Najpierw wołana jest standardowa realizacja tej metody udostępniająca wszystkie zaimplementowane komendy (super queryCommand: aCommandQuery). Następnie dla dwu metod (o nazwach #editTransaction i #removeTransaction) ich dostępność jest ustalana na podstawie jakiegoś warunku (tu akurat na podstawie tego, czy użytkownik wybrał jakąś pozycje z listy transakcji).
A oto realizacja metody queryCommand w prezenterze:
Presenter>>queryCommand: aCommandQuery "Enters details about a potential command for the receiver into aCommandQuery" (self respondsTo: aCommandQuery command) ifTrue: [ aCommandQuery beEnabled ].(Metoda Object>>respondsTo: selector stwierdza, czy obiekt rozumie komunikat selector, czyli czy zdefiniowano w tym obiekcie metodę obsługującą ten komunikat.)