- if the IDCMP for the given window is opened, and the IDCMPFlags
argument is not zero, this means that you want to change the
state of which events will be broadcast to you through the IDCMP
@pch, post #1
piszac "przyblokowac" mialem na mysli np. taki scenariusz:
program musi wczytac grafike i ja wyswietlic - to zajmuje troche czasu a w miedzy czasie do aktywnego okna dochodza sygnaly od zniecierpliwionego uzytkownika :) o wcisnieciu klawisza, dwukliku na innym pliku itd
/* Strukturę Requester inicjujesz przy użyciu: */ struct Requester requester; InitRequester(&requester); /* Następnie wywołujesz poleceniem: */ Request(&requester, okno); /* ... i zamykasz za pomocą funkcji: */ EndRequest(&requester, okno);
@pch, post #1
@Hexmage960, post #2
Putting up a requester merely because you are in a phase of the program where it would be difficult to deal with user input is bad style. Modal requesters should be used only when the program requires user interaction before proceeding.
@docent, post #3
Pomysly z reqesterami mozesz sobie darowac - nie do tego sluza.
@pisklak, post #7
@Hexmage960, post #5
No requestery służą głównie do dokonywania wyboru przez użytkownika. Z powodzeniem można z nich też korzystać w taki sposób, o którym napisałem - otworzyć osobne okienko i zablokować dostęp do nadrzędnego okna poprzez requester bez grafiki.
Tutaj jest o tym napisane: link
Przedstawione są zalety tego rozwiązania - to osobne okienko może być manipulowane, rysowane itd., może mieć własne menu. I może mieć dowolne gadżety, w tym GadTools.
Ja bym tak to zrobił: zablokował IDCMP w oknie nadrzędnym, otworzył okienko z progresem dłuższej operacji, która musi być zakończona przed kontynuacją działania programu z przyciskiem "Anuluj".
@docent, post #11
Tekst, do ktorego linkujesz opisuje rozwiazanie, w ktorym zamiast requestera wykorzystuje sie zwykle okno, pelniace jego funkcje a input do glownego okna jest blokowany za pomoca pustego requestera.
Jak sie to ma to pytania autora jak ignorowac przychodzace eventy do glownego okienka?
To rozwiazanie wymaga reqularnego sprawdzania i obslugi eventow okienka z progresem, no i aktualizacji progresu w trakcie wykonywania operacji. Nie o to chodzilo, choc z punktu widzenia uzytkownika moze to byc wygodniejsze, szczegolnie gdy operacja zajmuje wiecej czasu.
Requestery sluza do wylacznie do komunikacji z uzytkownikiem, gdy potrzebny jest jakis input z jego strony. To, ze mozna je wykorzystac do czego innego nie oznacza, ze tak powinno sie robic.
@Hexmage960, post #12
@pch, post #8
nie, bo jak program wezmie sie za wczytywanie/przerabianie grafiki to glowna petla programu stoi dopoki ta operacja sie nie zakonczy
@san_u, post #16
W tym ostatnim rozwiązaniu zastanawiam się czy byłyby jakieś komplikacje, gdyby ktoś podczas renderingu zmieni sobie godzinę w Amidze.
@san_u, post #16
@pch, post #18