Tytuł programu jest może mało wymowny, lecz zgoła odmienne i bardziej przydatne wydaje się być jego przeznaczenie. Argue to generator GUI, z którym zapewne każdy z Was wielokrotnie się już spotkał. Program w efekcie swojego działania zbliżony jest do innego generatora GUI - R(equest). Pomijając jednak efekt, filozofia i sposób działania obu programów są zgoła odmienne. O ile R(equest) generuje po prostu GUI odpowiednio interpretując commodorowski szablon argumentów, o tyle Argue potrafi to zrobić znacznie bardziej inteligentnie, dodając wszelkiego rodzaju opisy, pomoc, czy chociażby obrazki mające wartość wyłącznie estetyczną. Radzi sobie także doskonale z programami z tzw. uniksową składnią szablonu argumentów. Nie ma jednak nic za darmo. Argue do swojego działania wymaga stosownego skryptu, w którym wszystkie nasze zachcianki musimy uwzględnić. Tak więc GUI jakie uzyskamy zależy w dużej mierze od tego, co znajdzie się w skrypcie. Napisanie takiego skryptu nie należy do rzeczy skomplikowanych. Istnieją jednak pewne reguły i wytyczne, których należy się trzymać. W tym kursie powinieneś znaleźć wszelkie informacje, które pozwolą Ci stworzyć GUI praktycznie do każdej komendy czy nawet programu.
Pisanie skryptów w Argue nie jest rzeczą trudną, każdy może się tego nauczyć przy odrobinie chęci. Najpierw trzeba pobrać argumenty z programu, aby później na ich podstawie napisać sobie GUI. Najprostszym sposobem, aby takie argumenty wyciągnąć z programu jest podanie znaku "?" przy jego uruchamianiu z CLI. Jako przykładem posłuży mi program CyberQT w wersji 1.4. Podając argument "?" otrzymamy następujący wynik:
FILES/M,PUBSCREEN/K,SCREENMODEREQ=SMR/S,SCREENMODEID=SMID/K,FORCE24/S,GRAY=GREY/S,AGA/S,HAM8/S, DITHER/S,CMAP/K,BUFFERSIZE=BUF/K/N,DELAY/K/N,LOOP/S,MAXFPS/S,NOSOUND/S,NOVIDEO/S,SKIP/S, AUDIOPRELOAD=APL/S,MAGNIFY/K/N,STATS/S,QUIET/S
Argumenty te ukażą się w okienku CLI i trochę nudne, a zarazem męczące byłoby ich ręczne przepisywanie, dlatego najlepiej przekierować te argumenty do gotowego pliku za pomocą dodania argumentu: >XXX:Y (gdzie XXX to nazwa wolumenu, może być nawet RAM, a Y to nazwa pliku, oczywiście może to być jakikolwiek wyraz). Przykładowo rozkaz taki będzie wyglądał tak:
C:CyberQT ? >RAM:CQT
Następnie należy włączyć jakikolwiek edytor tekstu (nie polecam systemowego ED-a, osobiście preferuję do takiej roboty CygnusEdytor). Kolejną rzeczą będzie poukładanie tych argumentów jeden pod drugim, przy czym należy pamiętać aby usunąć przecinki. Rzeczą następną będzie uzupełnienie skryptu o parę drobnostek. Na samym początku należy wpisać @NEWFASHION - jest to dla Argue informacja, że od tego miejsca zaczynają się argumenty. Oczywiście przed tą informacją można wpisać, co się tylko chce (jak komuś się chce, to może sobie tam nawet przepisać "Pana Tadeusza"). Powinno to wyglądać tak:
@NEWFASHION
FILES/M
PUBSCREEN/K
SCREENMODEREQ=SMR/S
SCREENMODEID=SMID/K
FORCE24/S
GRAY=GREY/S
AGA/S
HAM8/S
DITHER/S
CMAP/K
BUFFERSIZE=BUF/K/N
DELAY/K/N
LOOP/S
MAXFPS/S
NOSOUND/S
NOVIDEO/S
SKIP/S
AUDIOPRELOAD=APL/S
MAGNIFY/K/N
STATS/S
QUIET/S
Zapewne zastanawiające jest, co oznaczają te ukośniki i litery za argumentami.
Są to informacje o tym, jaką wartość przyjmuje argument. Dla Argue są one równie
istotne, gdyż przy ich pomocy program "wie" czy argument przyjmuje wartość
tekstową, czy też jest zwykłym znacznikiem. Postaram się omówić co każdy z nich oznacza:
/M - powoduje utworzenie multilisty, na którą będzie można wrzucić pliki do odtworzenia,
/S - jest to zwykły gadżet znacznika, czyli zwykłe ON/OFF,
/K - powoduje utworzenie gadżetu tekstowego,
/K/N - to zaś powoduje utworzenie suwaka liczbowego.
To byłoby już praktycznie wszystko. Pozostaje tylko dodać ikonę, podać tooltypes w ikonie i można cieszyć się gotowym GUI do naszego programu. Jednak używanie takiego GUI będzie mało poręczne.
Teraz podam gotowy skrypt, który przedstawi jak można zmienić GUI, aby było łatwe w obsłudze, a następnie omówię zmiany jakie wprowadziłem:
@NEWFASHION
FILES/M [PATTERN="#?.(mov|qt)" HELP="Wybierz plik QuickTime"]
PUBSCREEN/K [PUBSCREENPOPUP DEFAULT=Workbench HELP="Wybierz ekran publiczny"]
SCREENMODEREQ=SMR/S [HELP="Powoduje otwarcie requestera ekranów"]
SCREENMODEID=SMID/K [can cc "1087504434=CV64_3D_15BIT_800x600" "1087504450=CV64_3D_16BIT_800x600" "1087504467=CV64_3D_24BIT_800x600" HELP="Wybierz ekran roboczy"]
FORCE24/S [on HELP=Preferuj 24 bity"]
GRAY=GREY/S [HELP="Wyświetlaj w szarościach"]
AGA/S [HELP="Specjalny tryb dla AGA"]
HAM8/S [HELP="Wyświetlaj w HAM8"]
DITHER/S [HELP="Użyj roztrząsania na ekranie poniżej 15 bitów"]
CMAP/K [FILEPOPUP HELP="Wybierz 8 bitową mapę kolorów"]
BUFFERSIZE=BUF/K/N [MIN=5 DEF=25 MAX=1024 HELP="Podaj wielkość bufora przy odtwarzaniu"]
DELAY/K/N [MIN=0 DEF=0 MAX=10 HELP="Podaj ile program ma odczekać, zanim zacznie odtwarzać"]
LOOP/S [HELP="Zapętlaj odtwarzanie"]
MAXFPS/S [HELP="Odtwarzaj z maksymalną prędkością"]
NOSOUND/S [HELP="Nie odtwarzaj dźwięku"]
NOVIDEO/S [HELP="Nie odtwarzaj obrazu"]
SKIP/S [on HELP="Przeskakuj klatki"]
AUDIOPRELOAD=APL/S [HELP="Przeładuj dźwięk do pamięci"]
MAGNIFY/K/N [MIN=1 DEF=1 MAX=4 HELP="Powiększenie obrazu"]
STATS/S [HELP="Wyświetla status odtwarzania"]
QUIET/S [on HELP="Nie wyświetlaj niczego"]
Przy argumencie FILES w kwadratowym nawiasie podałem parametr PATTERN="#?.(mov|gt)". Spowoduje to, że przy otwarciu okna wyboru plików, uwzględniane będą tylko pliki z takim rozszerzeniem, dalej HELP - jest to nic innego jak pomoc przy pracy z naszym GUI. Gdy w cudzysłowiu wpisze się jakąś informację, to ukaże się ona w postaci "dymku" MUI.
Następnie przy PUBSCREEN dodałem PUBSCREENPOPUP - spowoduje to pojawienie się gadżetu, gdzie będzie można wybrać ekran publiczny, na którym ma się uruchomić nasz program (nie GUI), DEFAULT umożliwia zdefiniowanie już na starcie GUI, na jakim ekranie ma się uruchomić program, bez potrzeby wybierania z listy ekranów publicznych.
Parametr "can cc" przy argumencie SCREENMODEID umożliwia zdefiniowanie gotowych parametrów. Należy wtedy po "can cc" wpisać w cudzysłowach parametry, które można będzie wybrać z listy dostępnej po kliknięciu na gadżet lupy. Przy argumencie FORCE24, w kwadratowym nawiasie wpisałem "on", oznacza to, że ten znacznik zawsze będzie zaznaczony, no chyba że się go odznaczy.
Przy argumencie BUFFERSIZE, w nawiasie wpisałem wartości MIN=5 DEF=25 MAX=1024, oznacza to, że na suwaku minimalną wartością będzie 5, maksymalną 1024, a standardową przy każdym uruchomieniu GUI - 25. Oczywiście widać także, że wszędzie podałem parametr HELP.
Istnieje także możliwość, że zamiast multilisty, na którą wrzucamy pliki, ukaże się gadżet tekstowy z przyciskiem wyboru. Aby tak się stało należy zamiast
FILES/M [PATTERN="#?.(mov|gt)" HELP="Wybierz plik QuickTime"]
podać
FILES [FILEPOPUP PATTERN="#?.(mov|gt)" HELP="Wybierz plik QuickTime"]
Parametr FILEPOPUP działa praktycznie jak /M, tyle że umożliwia wybór tylko jednego pliku.
Ważną rzeczą są argumenty uniksowe, czyli takie z minusikami. Na pewno każdy spotkał się z takimi programami. Nie posiadają one ukośników z literami (mowa o tym wyżej). Należy je wtedy samemu uzupełnić. Oczywiście trzeba samemu ustalić czy dany argument to znacznik, suwak czy też gadżet tekstowy. W tym momencie za przykład posłuży mi program AudioConvert. Po przekierowaniu argumentów do pliku wyglądają one następująco:
-if <freq> input frequency (for raw file)
-it <tracks> input tracks (for raw file)
-f <freq> output frequency
-m mono output
-t <type> output type {RAW|AIFF|ADPCM}
-is input swap little <-> big endian
-q quiet
Trzeba je teraz "przetłumaczyć", żeby były bardziej zrozumiałe. Ja w swoim GUI zrobiłem to następująco:
@NEWFASHION
-if=Input frequency/K [can cc "11025" "16000" "22050" "32000" "44100" "48000" HELP="Wybierz częstotliwość dla pliku wejściowego"]
-it=Input tracks/K [can cc "1" "2" HELP="Ilość kanałów dla pliku wejściowego RAW"]
-f=Output frequency/K [can cc "11025" "16000" "22050" "32000" "44100" "48000" HELP="Wybierz częstotliwość dla pliku wyjściowego"]
-m=Mono output/S [HELP="Zaznacz jeśli plik wyjściowy ma być MONO"]
-t=Output type/K [can cc "RAW" "AIFF" "ADPCM" HELP="Wybierz format dla pliku wyjściowego"]
-is=Input swap/S [HELP="Zmiana formatu nagłówka pliku (little/big endian)"]
-q=Quiet/S [HELP="Zaznacz jeśli program nie ma wyświetlać komunikatów"]
=Input file/M [PATTERN="#?.(raw|aiff|aifc|aif|adpcm|adp|pcm)" HELP="Wybierz plik wejściowy"]
=Output file [FILEPOPUP HELP="Wybierz plik wyjściowy"]
I to byłoby wszystko jeśli chodzi o programy z argumentami uniksowymi. Należy podać jeszcze w ikonie tooltype UNIX.
Praktycznie ostatnią rzeczą zostały tooltypes. Najpierw należy dodać ikonę (należy pamiętać, aby była to ikona typu PROJECT), przydałoby się także zaznaczenie bitu protekcji "S". Argue operuje następującymi tooltypami:
COMMAND - tutaj należy podać pełną ścieżkę dostępu do programu, dla którego powstało GUI (np. COMMAND=C:CyberQT),
COMMANDLINE - spowoduje utworzenie gadżetu tekstowego, gdzie będzie można wykonać jakiekolwiek polecenie DOS; jest to coś w stylu "Wykonaj polecenie..." z menu Workbencha,
HELPFILE - tutaj należy podać nazwę pliku z pomocą, najlepiej niech ten plik znajduje się w tym samym katalogu co nasze GUI (np. HELPFILE=CyberQT.help); pomoc należy napisać w zwykłym edytorze tekstu (ASCII)
LOGOFILE - jeśli chcemy chociaż troszeczkę upiększyć nasze GUI, to możemy dodać do niego malutki
obrazek. Może on być w formacie jaki tylko chcemy (IFF, GIF, JPEG), należy tylko posiadać odpowiednie
datatypy. Odpowiednią wielkością jest 100x49 pikseli (ja osobiście stosuję 99x48 pikseli). Jeśli obrazek
będzie mniejszy, to zostanie pokazany sąsiadująco, a jeśli będzie większy to po prostu nie będzie go
całego widać. Najlepiej niech nasze logo znajduje się w katalogu razem z GUI (tak samo jak
przy HELPFILE), (np. LOGOFILE=CyberQT.logo)
MIXTURE - spowoduje, że argumenty nie będą sortowane, tylko wrzucone po kolei, tak jak są zapisane
w skrypcie.
NOLOGO - jeśli w katalogu C: razem z poleceniem Argue znajdować się będzie standardowe logo, to
nie zostanie ono wyświetlone,
NOHELP - tak samo jak przy NOLOGO, tylko mowa tutaj o pliku pomocy,
NOSPACES - spowoduje, że gdy włączony jest tooltype dla programów uniksowych, to komendy wyjściowe będą
wyglądać np: "-e4 -xfoo.bar", zamiast "-e 4 -x foo.bar",
NOVIRTUAL - spowoduje, że okno GUI będzie większe, ponieważ argumenty będą bardziej oddalone od
siebie,
OUTPUT - tutaj ustalamy gdzie mają być przekierowane informacje o procesie, np: OUTPUT=>NIL: lub
OUTPUT=>RAM:Info, lub OUTPUT=>CON:////Argue/NOSIZE/WAIT/CLOSE,
PAGEGROUP - spowoduje pogrupowanie argumentów na STRINGS (paski), SWITCHES (przełączniki) i INTEGERS
(suwaki itp.). Jeśli ten tooltype nie zostanie podany, wtedy wszystkie elementy będą na
jednej zakładce (stronie),
REQUIRES - tutaj należy podać minimalną wersję Argue potrzebną dla poprawnego uruchomienia GUI (ja posiadam
wersję 1.4 i wpisałem REQUIRES=13),
SINGLE - aktywne tylko wtedy, gdy pliki wrzucone zostały na multilistę (/M). Spowoduje to, że gdy na
liście zaznaczonych będzie kilka plików, to odtworzony zostanie pierwszy, który jest zaznaczony,
TITLE - tutaj należy podać tytuł, który ukaże się w okienku (np. TITLE=CyberQT GUI),
UNIX - należy wpisać, jeśli program podaje argumenty uniksowe (z minusikami - mowa o tym w poprzednim akapicie),
USEKNOBS - spowoduje zamianę standardowych suwaków na inne (argument /N),
WINDOW_ID - należy podać tutaj identyfikację dla GUI, (np. WINDOW_ID=CQTGUI),
SHUTDOWNCOMAND - spowoduje, że w momencie zamykania GUI zostanie uruchomiony podany przez nas
program (np. SHUTDOWNCOMMAND=C:Multiview).
Wszelkie pytania i sugestie dotyczące kursu, pod numerami telefonów:
0 - 603 109 302 (Kosmo)
0 - 603 836 036 (Rafito)
Podziękowania dla ZEDA, za pomoc w umieszczeniu strony w internecie.
Copyright 2005 W.S.K. na podstawie amiga guide Thorstena Stocksmeiera.
Przykładowe GUI do kilku programów można pobrać stąd.