Przejdź do głównej zawartości

Funkcjonalność ViewManagera

«Punkty dostępu»

IViewManager umożliwia wyświetlanie gotowych dialogów Syrve POS. Jest to możliwe, gdy Syrve POS przekazuje kontrolę do wtyczki w ramach operacji modalnej, wywołując odpowiednią metodę i przekazując do niej instancję IViewManager jako jeden z argumentów. Obiekt ten jest istotny tylko w obrębie metody, do której jest przekazany, i zostanie usunięty po zwróceniu kontroli przez wtyczkę z tej metody.

Przykłady operacji modalnych:

Ogólna koncepcja

Wtyczka wywołuje metodę i przetwarza wynik: var result = viewManager.ShowSomething(...). W zależności od sygnatury metody, wtyczka otrzymuje prymitywną zmienną (bool, int, string) lub instancję IInputDialogResult zgodnie z semantyką.

Jeśli logika biznesowa wymaga walidacji wartości (na przykład trzeba zweryfikować dostępność numeru pokoju hotelowego), właściwe podejście jest następujące:

  • użytkownik zamyka dialog
  • wtyczka waliduje wynik
  • jeśli walidacja się nie powiedzie, dialog pojawia się ponownie

check_number

W przypadku powiadomień, które nie wymagają odpowiedzi użytkownika, zaleca się używanie nie-modalnych wyskakujących okienek (zobacz powiadomienie, ostrzeżenie, błąd), ponieważ nie wymagają one instancji IViewManager, dzięki czemu mogą być wyświetlane w dowolnym momencie.

Opis funkcjonalności

Dialog z jednym przyciskiem

ShowOkPopup() wyświetla okno dialogowe z nagłówkiem, tekstem oraz przyciskiem «OK», który zamyka dialog.

ok

ShowErrorPopup() wyświetla okno dialogowe z nagłówkiem «Błąd», tekstem oraz przyciskiem «Zamknij».

error

Dialog z dwoma przyciskami «Tak/Nie»

ShowYesNoPopup() wyświetla okno dialogowe z nagłówkiem, tekstem oraz dwoma przyciskami, zwracając true jeśli naciśnięto «Tak».

yesno

Dialog wyboru

ShowChooserPopup() przyjmuje listę łańcuchów znaków oraz opcjonalnie indeks domyślnego elementu jako parametry i zwraca indeks wybranego elementu. Posiada opakowanie, które przyjmuje listę obiektów oraz funkcję zwracającą tekstową reprezentację obiektu Func<T, string>, opcjonalnie domyślny element, i zwraca wybrany przez użytkownika element. Jeśli użytkownik nie wybierze elementu (naciśnie «Anuluj»), zwracane jest -1 lub null. Szerokość przycisku może być określona jako parametr opcjonalny. Im węższy przycisk, tym więcej kolumn z przyciskami mieści się na jednej stronie. Domyślnie szerokość przycisku to ButtonWidth.Normal.

chooser

Dialog wprowadzania niestandardowych linii

ShowKeyboard() wyświetla dialog z klawiaturą ekranową. Dostępne parametry:

  • tekst otwarcia
  • czy dozwolone jest wieloliniowe wprowadzanie
  • limit długości linii
  • czy pierwsza litera każdego słowa powinna być wielka (wygodne dla nazw własnych)
  • czy wprowadzenie ma być maskowane (jeśli wpisywane jest hasło)

keyboard

Dialog wprowadzania liczb

ShowInputDialog() z parametrem type = InputTypes.Number oraz opcjonalnym parametrem initialValue – wartość początkowa, może być użyty do wprowadzenia liczby. Aby zinterpretować wynik wprowadzenia, zwracany IInputDialogResult należy rzutować na NumberInputDialogResult.

number

Dialog wprowadzania enumerowanego łańcucha znaków

Oprócz wyżej wymienionego istnieje metoda ShowExtendedInputDialog(). Jednym z jej parametrów jest klasa ustawień ExtendedInputDialogSettings. Jeśli ustawisz tam ExtendedInputDialogSettings.EnableNumericString = true, użytkownicy będą proszeni o wprowadzenie cyfr. Wraz z tym ustawieniem można ustawić tekst opisowy ExtendedInputDialogSettings.TabTitleNumericString. W przeciwieństwie do wyżej wymienionej metody wprowadzania, dane wprowadzone w tej metodzie reprezentują łańcuch znaków, co pozwala na wprowadzanie zer wiodących oraz dużych liczb przekraczających int. Aby zinterpretować wynik wprowadzenia, zwracany IInputDialogResult należy rzutować na NumericStringInputDialogResult.

ext_number

Przykład:

var settings = new ExtendedInputDialogSettings
{
EnableNumericString = true,
TabTitleNumericString = "Tytuł zakładki wprowadzania liczby"
}
var dialogResult = viewManager.ShowExtendedInputDialog(
"Tytuł okna",
"Podtytuł informujący użytkowników, co dokładnie należy wprowadzić",
settings)
as NumericStringInputDialogResult;
if (dialogResult == null)
return;
// analiza wyniku

Dialog wprowadzania kodu kreskowego

Metoda ShowExtendedInputDialog() może być wywołana z ustawieniem ExtendedInputDialogSettings.EnableBarcode = true, które współgra z ExtendedInputDialogSettings.TabTitleBarcode. Aby zinterpretować wynik wprowadzenia, zwracany IInputDialogResult należy rzutować na BarcodeInputDialogResult.

Dialog wprowadzania numeru telefonu

Innym ustawieniem ShowExtendedInputDialog() jest ExtendedInputDialogSettings.EnablePhone = true, które współgra z ExtendedInputDialogSettings.TabTitlePhone. W tym przypadku dane wprowadzone przez użytkownika są walidowane zgodnie z ustawieniami systemu numerów telefonicznych; pole wprowadzania zawiera maskę numeru kierunkowego. Dopóki dane nie zostaną zwalidowane, przycisk «OK» nie będzie dostępny. Aby zinterpretować wynik wprowadzenia, zwracany IInputDialogResult należy rzutować na PhoneInputDialogResult.

ext_phone

Dialogi umożliwiające przesunięcie karty

Przesunięcie karty może być włączone zarówno w ShowInputDialog(), jak i ShowExtendedInputDialog(). W pierwszym przypadku należy określić type = InputTypes.Card, w drugim – ExtendedInputDialogSettings.EnableCardSlider = true. W obu przypadkach, aby zinterpretować wynik wprowadzenia, zwracany IInputDialogResult należy rzutować na CardInputDialogResult.

Różne

Metody wprowadzania w ShowInputDialog() i ShowExtendedInputDialog() można łączyć, korzystając z dostępnych ustawień jednocześnie. Na przykład użytkownik może zostać poproszony o wprowadzenie numeru karty lub przesunięcie karty. W takim przypadku zwracany wynik należy rzutować na każdy z oczekiwanych typów wyników.

Przykład 1 (kod):

var result = viewManager.ShowInputDialog(
"Wprowadź numer pokoju lub przesuń kartę",
InputDialogTypes.Number | InputDialogTypes.Card);

if (result is NumberInputDialogResult numeric)
Operations.AddNotificationMessage($"Wprowadzono numer {numeric.Number}", "SamplePlugin");
if (result is CardInputDialogResult card)
Operations.AddNotificationMessage($"Ścieżka karty {card.FullCardTrack}", "SamplePlugin");

Przykład 2 (możliwy układ i ustawienia):

ext_input

var settings = new ExtendedInputDialogSettings
{
EnableBarcode = true,
TabTitleBarcode = "Tytuł zakładki wartości numerycznej",
EnableCardSlider = true,
EnableNumericString = true,
TabTitleNumericString = "Tytuł zakładki kodu kreskowego",
EnablePhone = true,
TabTitlePhone = "Tytuł zakładki telefonu"
};
var dialogResult = viewManager.ShowExtendedInputDialog(
"Tytuł okna",
"Podtytuł wyjaśniający, co dokładnie użytkownik powinien wprowadzić.",
settings);

Więcej o interfejsie użytkownika

Wtyczka może wyświetlać własne dialogi, ale nie jest to objęte API Syrve POS. Proszę sprawdzić inny artykuł.