Ostatnio (6 sierpnia) byłem w Głośnej w Poznaniu na prowadzonych przez Mariusza Pisarskiego warsztatach „Piksel i lira”, poświęconych pisaniu hipertekstów przeznaczonych do czytania zarówno na komputerach, jak i urządzeniach przenośnych. Nie wnikając głębiej w same warsztaty (fajne były:), napiszę tylko, że rozmawiałem też przy okazji z nim na temat hipertekstu, który piszę. Hipertekstowi nadałem formę windowsowego kreatora („wizarda”) używając obficie wszystkiego, co windowsowe GUI ma do zaoferowania. Nie będę pokazywał tu wszystkiego, skupię się tylko na jednej z atrakcji — MessageBox'ach.
Pamiętacie krążące w internecie jakąś dekadę temu pliki uruchamiające sekwencję komunikatów, której nie można było przerwać i trzeba było mozolnie klikać OK? O ile złośliwość takich zabaw do mnie nie trafia, to sama koncepcja budowania narracji w taki sposób spodobała mi się. Zresztą sam MessageBox pod tym względem spodobał mi się nawet wcześniej, gdy dopiero uczyłem się programować i trafiłem gdzieś na program pozwalający definiować parametry dla wywołań systemowej funkcji int MessageBox(…) — tekst, tytuł, ikonkę, przyciski — kusiło, żeby wpisywać w te komunikaty cokolwiek, żeby tylko się nimi pobawić, żeby się nacieszyć tym, że oto udało mi się wyświetlić komunikat z własnym tekstem.
Pisząc hiperfikcję zdecydowałem się powrócić do tych pierwszych fascynacji możliwością tworzenia interfejsów i między innymi bawienia się okienkami komunikatów. Powstało w ten sposób coś takiego, jak w poniższej przykładowej leksji (kliknij link „milczeniu”):
Oczywiście w praktyce te komunikaty wyglądają lepiej — są systemowymi komunikatami, tytuły mają w pasku tytułu okna, a nie w treści komunikatu, mają systemowe ikonkami i przyciski Tak/Nie zamiast OK/Anuluj — czego niestety na stronie internetowej zrobić się nie dało. Wizualnie wygląda to jak w kolejnym przykładzie (w którym notabene próbuję wpleść w narrację systemowy przycisk „Ponów próbę”):
Zabawa jest fajna, okazuje się jednak, że z MessageBox'ami jest pewien problem: można wybierać tylko z pewnego wąskiego zestawu przycisków i ikonek. Takie ograniczenia oczywiście pobudzają kreatywność, jak w przykładzie z „Ponów próbę”, jednak kusi, żeby w taką kaskadę wpleść również komunikaty z własnymi napisani ma przyciskach. Okazuje się jednak, że tu sprawa jest trudniejsza. Można co prawda zrobić własne okno podobne do systemowego, ale wtedy komunikat przestanie wyglądać systemowo na innych wersjach Windowsa. Trzeba więc modyfikować okna kontrolowane przez system. Tu sprawa jest trudna, ale nie tak beznadziejna jak w przypadku komunikatów w przeglądarce — aplikacje systemowe mogą bez ograniczeń korzystać z niskopoziomowych wywołań WinAPI. Ponieważ jednak pisałem w C#, w którym nie da się tego prosto zrobić, odpuściłem.
W Głośnej Mariusz Pisarski namawiał mnie on, żeby ten hipertekst opublikować nie tyle jako hipertekst, co jako narzędzie do tworzenia hipertekstów. Istotną częścią mojego hipertekstu jest własna kontrolka, która wyświetla tekst z linkami, która pozwala definiować podstawowe formatowanie, ale nie wykorzystuje w tym celu silnika przeglądarki, więc unika się problemów związanych z coraz to innym działaniem kolejnych wersji IE.
O ile upraszcza to wrzucanie na formatkę tekstu, to obsługa kliknięć w dalszym ciągu programowana jest w C#. Aby było to narzędzie dla pisarzy (a nie tylko programistów), potrzebny byłby zatem wizualny edytor pozwalający definiować działanie linków (bo nie chodzi tu tylko o <a href="…">, ale również o linki warunkowe, losowe i stretchtext; o linkach wywołujących MessageBox'y nie wspominając).
Do stworzenia takiego edytora przymierzałem się już wcześniej, kiedy programowałem linki warunkowe do „Popołudnia, pewnej historii…”, jednak najsensowniejszym rozwiązaniem byłaby edycja linków w formie grafu przejść, a w żadnym znanym mi środowisku programistycznym nie ma kontrolki wyśietlającej graf. Kilka razy przekładałem więc pomysł na niedookreślone „później” i dopiero teraz się za to zabrałem.
Moim celem było napisanie aplikacji rysującej grafy, a nie bawienie się MessageBox'ami. Jednak czytając w internecie o WinApi natrafiłem na stronę „Tuning MessageBox-a”. Pokusa, żeby to wypróbować, była oczywiście na tyle silna, że czem prędzej to zrobiłem. I osiągnąłem to, czego w C#'ie nie byłem w stanie — napisałem sobie funkcję wyświetlającą MessageBox'y ze zmienionymi napisami na przyciskach i własną ikonką:
post scriptum
A z samych warsztatów (poza wiedzą o tym, że np. można HTMLa wyeksportować na Kindla, oraz jak pisać leksje, aby narracja była spójna pomimo tego, że tekst jest ergodyczny) wyniosłem jeszcze jeden dość istotny wniosek: dla humanisty nawet stworzenie kilku linkujących do siebie plików HTML jest przerażające.
Zresztą, dlaczego HTML jest tak zrobiony, że tych plików musi być kilka? Wolałbym jeden. Będę miał jeden. Napiszę własny edytor i będę miał.