QN-Browser: Dokumentacja dla informatyków

Tab browsera

Browser jest budowany na podstawie taba. Ogólne informacje zawarte w tabie:

Nagłówek

Pole Opis Wartość Wartość domyślna
BROWSER_TYPE Typ browsera, który determinuje rodzaj stosowanego grida oraz profil akcji.
[STANDARD|EDITABLE|GROUP_BY] STANDARD
FIELDSORDER Kolejność wyświetlanych kolumn ABSOLUTE(<nazwa pola taba>+) Pola wymienione w tabie w kolejności linii
LINE_ATTRIB Kolor linii wyrażenie autfun oparte na polach rekordu dające w wyniku odpowiedni kolor wiersza null
ORDERSBAR Pasek wyszukiwania [TRUE|FALSE] FALSE
TITLE Nazwa okna browsera "<nazwa okna>" "Spis"
TOOLBAR_TYPE Typ paska narzędzi [NONE|SMALL|BIG] BIG
VERT_CURSORS Pionowy pasek przewijania [TRUE|FALSE] TRUE

Macierz opisu pól

Część z pól opisywanych w tej części zostaje wyświetlona jako kolumny browsera. Opis dotyczy właściwości kolumn. Poniżej znajduje się lista atrybutów kolumny.
Atrybut Opis
ATTRIB atrybuty wyświetlania
  • FONTNAME - nazwa czcionki
  • FONTSTYLE - styl czcionki
  • BGCOLOR - kolor tła
AUTFUN wyrażenie, którego wynik jest wartością pola
EDILEN szerokość kolumny
ID identyfikator kolumny
LEN szerokość kolumny (jeśli nieobecne EDILEN)
MASK sposób wyświetlania wartości
NAME nazwa kolumny
TYPE typ wartości w kolumnie
VIS widoczność kolumny

Kilka przykładów z opisem

Przykład 1 - prosty browser

Wygląd na ekranie Komentarz do wyglądu na ekranie
<--- Nazwa okna; Ikonka "z łapką" to wejście do parametryzacji browsera
<--- Wiersz nagłówków

<--- Kolejne pozycje (rekordy) przeglądanej tabeli
<---
Zapis w języku konfiguracji
//---------------------------------------------------------------------------
//                          S Ł O W N I K typów okresu
//---------------------------------------------------------------------------
TAB VOC_TOKRES
    TITLE="Typ okresu"
    BASE=VOC_TOKRES
    RECEDIT=VOC_TOKRES_EDIT
    BASETYPE=SEP
    TOOLBAR_TYPE=NONE
    SIZE=40 10
    POS=100 10
    ORDERS=
    {
     ID          FIELDS            LABEL      ;
     ID          ( ID )            "Id"       ;
     KOD         ( KOD)            "Kod"      ;
    }

{
ID            LEN     TYPE      ATTRIB       NAME     ;
ID             8      INT       -            "Id"       VIS=HIDE   ;
KOD            1      STRING    (CAPITAL)    "Kod typu okresu"    ;
NAZWA         30      STRING    -            "Pełna nazwa typu okresu";
}

TAB VOC_TOKRES_EDIT extends VOC_TOKRES;
    TITLE="Okresy"
    LAYOUT=TCP( KOD NAZWA )
{;
}
       
Komentarz do zapisu w języku konfiguracji
TAB - to identyfikator typu bloku
VOC_TOKRES - to identyfikator obiektu TAB
TITLE - to identyfikator atrybutu: tytuł TAB
"Typ okresu" - to wartość atrybutu "tytuł TAB" (Tytuł okna edycji rekordu)
BASE - to identyfikator bazy z serwera baz danych (lub pliku dyskowego)
VOC_TOKRES - to nazwa bazy z serwera baz danych
BASETYPE - to identyfikator typu serwera baz danych
SEP - to identyfikator oznaczający, że serwerem jest serwer Q-SEP
TOOLBAR_TYPE - to typ paska narzędzi (gdy przyjmie wartość NONE - pasek się nie ukaże)
SIZE - to identyfikator atrybutu wymiaru okna, w którym ukaże się browser
POS - to identyfikator atrybutu pozycji ekranowej okna, w którym ukaże się browser
ORDERS - to identyfikator bloku definiowania uporządkowań tabeli
.................

       

Przykład 2 - rozbudowany browser

Wygląd na ekranie Komentarz do wyglądu na ekranie
<--- Nazwa okna; Ikonka "z łapką" to wejście do parametryzacji browsera

<--- Pasek ikonek, po najechaniu myszką ikonka "uwypukla się" (patrz
     lornetka) i po pewnej chwili pojawia się "dymek pomocy"
<--- Wiersz nagłówków

<--- Kolejne pozycje (rekordy) przeglądanej tabeli
<---

Zapis w języku konfiguracji
TAB PRZELEWY
    TITLE="Przelewy - Spis"
    BASE=PRZELEWY
    BASETYPE=SEP
    SIZE=0 50
    BROWSER_ACTIONS=+FULL_SET +F10MENU
    LINE_ATTRIB=(COLOR=~isNull(DATAP)?0:(isNull(DATE)?16711680:174592))
    // czarny czerwony zielony
    RECEDIT=PRZELEW_EDIT
    ORDERS=
    {
     ID          FIELDS                      LABEL        VIS   ;
     ID          ( ID )                      "Id"          -    ;
     MIESIAC     ( MIESIAC POSZLO DATAP ID ) "W/g czasu"   -    ;
     WIERZYC     ( KOD_WIERZ ID )            "W/g wierzycieli" -;
    }

{
ID            LEN     TYPE           NAME       ;
ID             8      INT           "Id"               VIS=HIDE ;
DATAP          8      INT           "Data przelewu"    MASK=DATE ;
DATAW          8      INT           "Data wystawienia" MASK=DATE ;
KOD_WIERZ     10      STRING        "Kod wierzyciela"  EVH=VocKopWierz(VOC_WIERZ,KOD);
NAZWA_WIERZ  104      STRING        "Nazwa wierzyciela"     VIS=SHOW MASK=SDESC(26 4);
NAZWA_B_WIERZ 30      STRING        "Nazwa banku"      VIS=SHOW;
KONTO_WIERZ   50      STRING        "Konto wierzyciela"    MASK=SDESC(25 2) VIS=SHOW;
BANK_MOJ      10      STRING        "Nasz bank"        EVH=VocKopMoj(VOC_BANK,KOD);
NAZWA_MOJ     54      STRING        "Nasza nazwa"      VIS=SHOW MASK=SDESC(26 4);
NAZWA_B_MOJ   30      STRING        "Nazwa banku"      VIS=SHOW;
KONTO_B_MOJ   50      STRING        "Numer konta"      VIS=SHOW MASK=SDESC(25 2);
KWOTA          8      DOUBLE        "Kwota"            MASK=MONEY;
SLOWNIE      180      STRING        "Słownie"          MASK=SDESC(30 3) AUTFUN=money2words(KWOTA);
TYTULEM       81      STRING        "Tytułem"          MASK=SDESC(30 3);
ROWPLA         1      INT           "Rodzaj transakcji" MASK=RADIOH("Przelew"=0 "Wpłata gotówkowa"=1) DEFVALUE=0;
POSZLO         1      INT           "W drodze do banku"  MASK=RADIOH("Tak"=1 "Nie"=0)  DEFVALUE=0;
UWAGI         30      STRING        "Uwagi"    ;
WALUTA         3      STRING        "Kod waluty" DEFVALUE="PLN";
MIESIAC        3      STRING        "Dotyczy miesiąca"  ;
DATE           8      INT           "Data wydrukowania"  MASK=DATE ;
TIDUZU         1      STRING        "Typ identyfikatora uzupełniającego" EVH=Voc(VOC_TIDUZU,KOD);
NIP           13      STRING        "NIP" DEFVALUE=sysfield("SYS_EDIT", "NIP") VIS=SHOW;
IDUZU         20      STRING        "Identyfikator uzupełniający";
TYWPLA         1      STRING        "Typ wpłaty" EVH=Voc(VOC_TYWPLA,KOD);
DEKLARACJA    20      STRING        "Deklaracja";
NRDEKLARACJI   2      STRING        "Numer deklaracji" EVH=Voc(VOC_NRDEKL,KOD);
OKRES          2      STRING        "Okres";
TOKRES         1      STRING        "Typ okresu" EVH=Voc(VOC_TOKRES,KOD);
NROKRESU       4      STRING        "Numer okresu";
SYMFOR         6      STRING        "Symbol formularza" EVH=Voc(VOC_SYMFOR,KOD);
OPISOKR        7      STRING        "Opis okresu";
}

       
Komentarz do zapisu w języku konfiguracji
TAB - to identyfikator typu bloku
PRZELEWY - to identyfikator obiektu TAB
TITLE - to identyfikator atrybutu: tytuł TAB
"Przelewy - Spis" - to wartość atrybutu "tytuł TAB" (Tytuł okna edycji rekordu)
BASE - to identyfikator bazy z serwera baz danych (lub pliku dyskowego)
PRZELEWY - to nazwa bazy z serwera baz danych
BASETYPE - to identyfikator typu serwera baz danych
SEP - to identyfikator oznaczający, że serwerem jest serwer Q-SEP
SIZE - to identyfikator atrybutu wymiaru okna, w którym ukaże się browser
BROWSER_ACTIONS - to identyfikator atrybutu standardowych akcji przypisanych do browsera
+FULL_SET +F10MENU - to wartość tego atrybutu (wszystkie standardowe akcje i element F10 - Przetwarzanie)
LINE_ATTRIB - to identyfikator atrybutu linii (atrybutu dowolnego zdefiniowanego dalej w formule)
(COLOR=~isNull(DATAP........) - to formuła definiowania atrybutu COLOR (wyświetlania linii / wiersza browsera)
RECEDIT - to identyfikator opisu elementu Edirec wywoływanego do edycji rekordu tabeli
PRZELEW_EDIT - to wartość tego identyfikatora. (Opis elementu Edirec należy pobrać z obiektu o nazwie PRZELEW_EDIT)
ORDERS - to identyfikator bloku definiowania uporządkowań tabeli
.................

       

Konfiguracja

Informacje dotyczące wyglądu browsera są konfigurowane na dwóch poziomach. Ustawienia wprowadzone przez twórce aplikacji, zawarte w tabach browserów, mają charakter pierwotny. Browser jest wyświetlany zgodnie z tymi ustawieniami na samym początku.

Każdy użytkownik może przedefiniowywać ustawienia danego browsera. Wszelkie zmiany, których dokona są zapisywane w jego przestrzeni parametrów. Pomimo zmiany ustawień wedle własnych upodobań zawsze istnieje możliwość powrotu do ustawień pierwotnych.

Menadżer ustawień

Klasy związane z ustawieniami browsera znajdują się pakiecie qline.browser.properties. Za operowanie ustawieniami na najwyższym poziomie jest odpowiedzialny menadżer ustawień. Menadżer jest reprezentowany przez obiekt klasy BrowserPropertiesManager. Umożliwia on:

Ustawienie kolumn jest zarządzane przez obiekt klasy BrowserLayout. Umożliwia on: Ustawienia kolumny są reprezentowane przez obiekt klasy ColumnInfo i dotyczą: Właściwości okna browsera są udostępniane poprzez obiekt klasy BrowserProperties.

Zapis i odczyt ustawień

Wszystkie ustawienia browserów danego użytkownika zapisane są w bloku Browser jego lokalnej przestrzeni parametrów. Ustawienia browsera stanowią jeden blok identyfikowany nazwą taba browsera. Pociąga to za sobą fakt, że jeśli używamy tego samego taba przy wyświetlaniu browserów w różnych miejscach aplikacji, to będą współdzieliły ustawienia. Właściwość ta jest raczej pożądana, gdy w wielu miejscach używamy dokładnie tego samego taba (np. kartoteka firm i słownik firm).

Ustawienia pojedynczego browsera podzielone są na grupy:

Zaczytywanie i zapis ustawień są konfigurowalne. Browser pełnoekranowy zawsze zapisuje i zaczytuje swoje ustawienia. W przypadku browserów wklejonych w masce BROWSER możemy podać parametr SAVECONFIG=[ALL,RECENT,LAYOUT,PROPERTIES], przy czym trzy ostatnie wartości można łączyć za pomocną znaku |. Parametr wskazuje, które grupy ustawień mają być zapisywane. Domyślne zachowanie określone jest w parametrze SaveInnerBrowserParams w pliku qline.txt. W przypadku braku tego parametru przyjmuję się pierwotnie wartość LAYOUT. Przy projektowaniu okien warto mieć na względzie efektywność, gdyż wiele historii w jednym oknie mogłoby decydować o wolnym pojawianiu się okna na ekranie.

Ustawienia są zaczytywane przy konstrukcji browsera, a zapisywane przy usuwaniu z drzewa komponentów. W żadnym innym momencie życia browsera operacje te nie są dokonywane automatycznie. Ustawienia są zaczytywane i zapisywane oddzielnie dla każdej grupy. Grupy ustawień LAYOUT i PROPERTIES rzadko ulegają zmianie. Oddzielne rozpatrywanie pozwala na efektywne wykorzystywanie lokalnego cache'a parametrów. Wszystkie ustawienia są przetrzymywane w pamięci podczas pracy browsera.

Moduł ma właściwość wersjonowania. Często dochodzi do modyfikacji informacji zapamiętywanych dla browsera, pojawiają się nowe możliwości i wymagania. Pojawia się problem dwojaki. Dostosowanie zaczytywania parametrów do sytuacji braku niektórych pól lub struktur jest wysoce nieefektywne i należy go uniknąć. Po drugie struktura może zostać niemal całkowicie zmieniona w nowym module.
Z obu tych względów wersja modułu ustawień, dla którego zostały one zapamiętane w takiej postaci jest również przechowywana. Jeśli ustawienia te zostaną zaczytane i wersja modułu będzie różna od zapisanej to ustawienia te zostaną zignorowane i użyte zostaną dla browsera ustawienia pierwotne. Przy zapisie ustawień zostaną one nadpisane zgodnie z nową wersją modułu. Jedynym wymogiem pozostaje słabe założenie, że moduł zaczytuje zawsze rekord parametrów i konroluje pole Version. W obecnej wersji 1.1. Wersjonowanie zostało wyłączone ze względów efektywnościowych. Przy pojawieniu się następnej wersji można ponownie uruchomić mechanizm, który poprawnie będzie nadpisywał poprzednie ustawienia, zakładając że brak znacznika wersji oznacza wersję starą.

Okno właściwości browsera

Ustawienia browsera na poziomie użytkownika aplikacji mogą być modyfikowane dwojako. Zmiana szerokości i kolejności kolumn dostępna jest za pomocą odpowiedniego przeciągania myszą i jest obsługiwana przez grida. Drugą możliwość stanowi edycja właściwości poprzez wywołanie okna ustawień browsera.

Okno ustawień pozwala na konfigurację ustawień kolumn i okna browsera. Jest ono dostępne pod ikoną ustawień okna znajdującą się w prawym górnym rogu okna. Pierwsz zakładka umożliwia modyfikację właściwości okna browsera. Są to dokładnie te ustawienia, które zapamiętywane są bloku Layout.
Druga zakładka pozwala na zmianę ustawień każdej z kolumn. Za zbiór dostępnych kolumn jest przyjmowana wartość pola nagłówka FIELDSORDER. Ustawienia kolumny pokrywają się z atrybutami dostępnymi w tabie. Kolumny ukryte pozostają w obecne w bloku layout, są zaczytywane i zapisywane.

Po dokonaniu odpowiednich zmian jest możliwe:

Po zatwierdzeniu okna (zarówno dla nowych ustawień lub dla ustawień pierwotnych) następuje usunięcie okna z drzewa komponentów i ponowne wstawienie. Przebudowywane są przy tym wszystkie komponenty okna. W ten sposób możliwe jest wyświetlenie okna browsera tuż po zatwierdzeniu nowych ustawień bez potrzeby ponownej konstrukcji browsera lub ingerencji użytkownika. Umożliwia to także przeładowywanie browserów wklejonych.

Eksport ustawień browsera do pliku

Wygodnym sposobem odpowiedniej konfiguracji wyglądu browsera jest jego zmodyfikowanie na ekranie i późniejszy eksport wprowadzonych ustawień do pliku w postaci taba. Jest to szczególnie wygodne przy konfiguracji czcionek i kolorów.

Eksport jest dostępny z poziomu okna konfiguracji browsera. Jest on dokonywany względem taba browsera. Tworzony tab rozszerza bieżący. W nowym tabie są zapisywane tylko te ustawienia, które muszą nadpisać lub dospecyfikować wartości bazowe.

Domyślnie tab ma nazwę o postaci <nazwa taba browsera>_VIEW. Nazwę tę można zmienić przy zapisywaniu taba. Nowy tab jest zapisywany do wskazanego pliku. Możliwe jest zapisywanie w trybie doklejania, co pozwala na szybkie wyeksportowanie ustawień wielu browserów do jednego pliku, a następnie odpowiedniego poprawienia plików qcon.

Dokładne omówienie eksportu ustawień

Pionowy kontroler przewijania

Nieznajomość bieżącej liczby rekordów w każdej chwili pracy z tabelą nie pozwala na zastosowanie pionowego paska przewijania. W to miejsce został zaproponowany kontroler przewijania, którego punkt bierny znajduje się w środku obszaru pracy. Odchylenie od środka powoduje przewijanie rekordów w kierunku odchylenia i z prędkością proporcjonalną do tego odchylenia. Działanie paska dla spisu można konfigurować za pomocą parametrów browsera

Menadżer akcji

Plik konfiguracyjny

Menadżer jest konfigurowany za pomocą pliku zewnętrznego browser_action.cfg.
Opisuje on:

Każdy typ browsera (profil), który oddzielnie ma zdefiniowane powyższe pojęcia. Dodatkowo można wyszczególnić profile bazowe dla danego typu browsera. Graf dziedziczenia musi być niecykliczny.
Wyróżniamy 3 typy browserów: Typy browserów mogą mieć różną konfigurację akcji dla różnych typów klientów. Typ klienta stanowi najogólniejszy stopień hierarchii. Obecnie wyróżniamy następujące typy klientów:
To jakiego typu jest aplikacja specyfikuje się w pliku konfiguracyjnym klienta qline.txt poprzez wpis: ClientType=["Classic"|"HTTP"]

Opis akcji dla typu browsera

Tablica rekordów Actions zawiera opisy kolejnych akcji. Dla akcji definiujemy:

Unikalność identyfikatorów nie jest wymagana, ale późniejsze wystąpienia tego samego identyfikatora spowodują przykrycie starej definicji nową.
Ikony są to obrazy w formacie GIF. Istnieją 2 rodzaje ikon 15x15 (małe), 30x30 (duże). Jeśli dla akcji chcemy zdefiniować ikonę, to powinniśmy utworzyć obie wersje. Wynika to z faktu, że toolbar może mieć zarówno małe, jak i duże ikony.
Ścieżka dotycząca ikony powinna wskazywać na ikonę dużą. Mała ikona musi znajdować się w tym samym katalogu i mieć nazwę poprzedzoną prefiksem mini_. Jeśli ikona duża znajduje się w pliku ikona.gif, to jej odpowiednik mniejszy rozmiarów powinien być zapisany w pliku mini_icon.gif.

Rekord tablic Sets zawiera opisy zbiorów akcji. Opis każdego zbioru składa się z identyfikatorów akcji lub nazw innych zbiorów. Zbiór akcji jest sumą zbioru wymienionych identyfikatorów i wymienionych innych zbiorów akcji. Struktura zawierania zbiorów musi być acykliczna.
Przykładowo:
Sets = { MODIFY_SET = array { "INSERT"; "INSERT_MODIFY"; "DELETE"; "MODIFY"; }; };

Tablica Sequence opisuje sekwencję akcji, które zostaną umieszczone na toolbarze. Akcja jest przedstawiana na toolbarze za pomocą ikony. Jeśli akcja nie ma przyporządkowanej ikony, to nie zostanie umieszczona na toolbarze pomimo obecności w sekwencji.
Przykładowo:
Sequence = array { "INSERT"; "DELETE"; "MODIFY"; "EYE_VIEW"; "ORDER_CHANGE"; "F2MENU"; }

Interfejs akcji

Akcja browsera jest opisywana przez pojedynczą klasę implementującą interfejs BrowserAction. Metody interfejsu:

Akcje należące do biblioteki znajdują się w pakiecie qline.browser.action. Dla klas realizujących akcje o podobnym przebiegu (np. akcje na zaznaczonych) zdefiniowano pomocnicze klasy abstrakcyjne. W zależności od rodzaju akcje zostały pogrupowane w podpakiety: standard, selection, multi. Ponieważ nowozdefiniowane akcje są w pliku konfiguracyjnym wskazywane z pełną kwalifikacją pakietów, więc mogą być definiowane w dowolnych pakietów.

Zarządzanie akcjami w aplikacji

Menadżer akcji browserów aplikacji (BrowserActionHolder) jest singletonem. Konfiguracja akcji jest zaczytywana z pliku browser_actions.cfg przy tworzeniu się instancji klasy menadżera. Analizowana jest wyłącznie część dotycząca odpowiedniego typu klienta (zgodnie z wpisem w qline.txt). Cały proces następuje przy zaczytywaniu konfiguracji aplikacji.

Ropatrywanie wszystkich profili rozpoczyna się od topologicznego uporządkowania ich zgodnie z relacją dziedziczenia sprecyzowaną przez opcjonalne pole BaseProfile. Zawiera ono profil bazowy, z którego przepisywana jest cała zawartość. Wymienione w aktualnym profilu synonimiczne struktury nadpisują bazowe. Graf dziedziczenia musi być acykliczny, w przeciwnym przypadku zgłaszany jest błąd.

Etapy analizy konfiguracji dla każdego profilu:

Zbiory akcji są tłumaczone według występowania nazw w tablicy opisującej dany zbiór. Zbiór może być definiowany poprzez inne zbiory (np. FULL_SET). Z tego też względu zawieranie musi mieć charakter acykliczny. Ostatecznie wszystkie zbiory zostają przetłumaczone na zbiór nazw akcji.
Sekwencja nazw akcji jest bezpośrednio zapisywana do danego profilu.

Akcja pobrana z menadżera jest wgrywana zgodnie z nazwą. Obiekt załadowanej klasy jest zapamiętywany w celach optymalizacyjnych. W ten sposób wgrywane są jedynie te operacje, które są potrzebne.

Zarządzanie akcjami w browserze

Browser jest budowany na podstawie informacji zawartych w tabie. Pole BROWSER_TYPE taba browsera zawiera nazwę profilu akcji. Determinuje zarówno typ browsera, jak i dostępne w nim operacje. Każdy browser ma obiekt klasy BrowserActionManager zarządzający wszelkimi akcjami browsera. Akcje dla danego browsera pochodzą z trzech typów definicji:

W polu BROWSER_ACTIONS wymieniane są akcje lub zbiory akcji spośród dostępnych w danym profilu browsera. Odpowiednie obiekty są pobierane z menadżera akcji. Zawierają one zarówno informacje o kodzie skojarzonym z akcją, jak i informacje prezentacyjne.

Dodatkowo występują zasady specjalne:

Wszystkie akcje wymienione jako pozycje menu browsera zostają dodane do ogólnego zbioru akcji browsera. Infomacje prezentacyjne pochodzącą z kolumn opisujących akcje browsera, które mają tą samą nazwę co pola definiujące akcję w bloku Actions profilu (SHORTCUT,HELP,ICON). W ten sposób nie ma potrzeby oddzielnego uzupełniania skrótów klawiszowych i pozycji paska narzędzi przez różne moduły.

Akcja browsera może też być tworzona w kodzie. Należy sporządzić klasę implementującą interfejs BrowseraAction, która zawiera kod akcji. Następnie należy zastosować BasicBrowserActionWrapper w celu połączenia definicji akcji z informacjami prezentacyjnymi. Tak zdefiniowaną akcję można dodać do zbioru akcji za pomocą metody addAction menadzęra akcji.

Akcje pochodzące z definicji BROWSER_ACTIONS oraz z F2 menu posiadają identyfikatory: Dla akcji mających swoje identyfikary możliwe są oparacje:

Jeśli zdefiniowana została akcja w menu, która ma identyfikator równy jednemu z identyfikatorów akcji browsera, to jest ona podmieniana w trybie nadpisywania. Pozwala to np. na wygodne zdefiniowanie własnych operacji wstawiania, czy usuwania rekordu oraz wszystkich innych akcji standardowych.

Budowanie paska narzędzi

Pasek narzędzi umożliwia dostęp do akcji za pomocą myszy. W zależności od bieżących ustawień browsera pasek może być:

Pasek składa się z ikon, które dodatkowo mają skojarzoną pomoc w dymkach. Pomoc ma automatycznie doklejaną w nawiasach informację o skrócie klawiszowym. Wszystkie powyższe dane są zawarte w informacjach prezentacyjnych dotyczących danej akcji.

Do paska dodawane są wyłącznie akcje mające skojarzoną ikonę i zdefiniowane w następujących miejscach:

Ikony dodawane są w kolejności powyższych kategorii, a w ramach kategorii odpowiednio według:

Schemat przygotowania akcji browsera

W konstruktorze okna browsera budowany jest menadżer akcji BrowserActionManager. Operacje są wykonywane w następującej kolejności

Menadżer menu

Szczęgólną rolę pełni w browserze menu główne dostępne pod klawiszem [F2]. Menu jest zwykłym blokiem typu MENU, ale część informacji jest w nim szczególnie traktowana.

Funkcje menu:

Menadżer menu jest obiektem klasy BrowserMenuManager. Jest on tworzony przy konstrukcji browsera. Zakres funkcjonalny menadżera: