# multi_switch

### Funkce

Nastavení logických hodnot do řady logických výstupních datových elementů pomocí tlačítek a přepínačů.

### Syntax

      multi_switch multi_switch_name;
        rem = string;
        bubble = string;
        owner = owner_name;
        position = integer, integer, integer, integer;
        win_disable = [ identifier, . . . ];
        win_title = string;
        access = integer;
        tab_select = integer;
        send_same_data;
        blink = boolean_expression;
        blink_rate = identifier;
        mode = identifier;
        receivers = [ identifier, . . . ];
        font = font_identifier, integer, style_identifier;
        item
          text = string;
          output = output_name;
          selected;
        end_item;
        item
          . . .
        end_item;
        sound = file_name;
        colors
          paper = color;
          ink = color;
          tshadow = color;
          bshadow = color;
        end_colors;
        blink_colors
          paper = color;
          ink = color;
          tshadow = color;
          bshadow = color;
        end_blink_colors;
      end_multi_switch;

### Specifické parametry přístroje

- blink
  Parametr uvádí logický výraz, jehož výsledek rozhoduje o tom, bude-li přístroj blikat -- tedy periodicky se překreslovat se střídavým použitím barevných sad colors a blink_colors. Po zastavení blikání se přístroj vždy vrátí do základní barevné sady colors.
- blink_rate
  Určuje frekvenci blikání přístroje uvedením jednoho z identifikátorů:
  slow - blikání s periodou 2 sekundy
  normal - blikání s periodou 1 sekunda
  quick - blikání s periodou 0.5 sekundy
- mode
  Přístroj multi_switch má módy slider, radio_button, combo_box, check_box, menu a menu_bar.
  Módy slider, radio_button a combo_box, menu a menu_bar dovolí vybrat vždy právě jednu položku. Všechny položky jsou neustále zobrazovány:
  V módu combo_box se vybírá jedna položka, která se jako jediná zobrazí. Výběr se provádí pomocí rolovacího seznamu:
  Mód check_box nabízí možnost výběru několika položek současně.
- receivers
  Obsahuje seznam všech přístrojů, kterým je zasílána zpráva při změně stavu přístroje.
- font
  Je parametr určující font popisů položek. Má vždy tři parametry. První z nich font_identifier určuje typ písma (např. TIMES, SYSTEM, aj.), druhý určuje jeho velikost v tiskových bodech a třetí parametr style_identifier rozhoduje o tom, zda bude písmo normální (normal), tučné (bold) nebo skloněné (italic).
- item a end_item
  Klíčová slova, která uzavírají parametry jedné z možností přístroje multi_switch.
  - text
    Je parametr obsahující libovolný řetězec znaků, který bude odpovídat položce přístroje. Vykreslí se v zadané barvě a typu písma.
  - output
    Udává jméno výstupního datového elementu, kam se bude hodnota nastavená přístrojem multi_switch zapisovat.
  - selected
    Příznak vybrané položky při inicializaci přístroje. Nebude-li toto nastaveno u žádné položky, bude při inicializaci aktuální první položka v pořadí.
  - sound
    Obsahuje jméno souboru '*.WAV' se zvukovým doprovodem přepnutí hodnot. Není–li tento parametr zadán, nebude přepínání hodnoty doprovázeno žádnými zvuky.
- colors a blink_colors
  Seznam prvků přístroje, kterým lze měnit nastavení barvy:
  paper - pozadí
  ink - písmo
  tshadow - horní okraj
  bshadow - dolní okraj

### Poznámka

Přístroj je vždy aktivován obsluhou stiskem klávesy <Enter> nebo levým tlačítkem myši na ovládacích prvcích. Navíc může být také aktivován např. časovačem nebo jiným přístrojem, kdy se může automaticky nastavovat podle hodnoty ve svém výstupním datovém elementu nebo cokoliv realizovat ve své proceduře OnActivate().
Implicitně se nastaví parametry:

      position = 0, 0, 40, 40;
      access = 4294967295;
      tab_select = 4294967295;
      mode = slider;
      font = SYSTEM, 10, bold;

### Příklad

Příklad nastavení parametrů přístroje multi_switch:

      multi_switch id_2;
        owner = background;
        position = 337, 222, 130, 38;
        mode = radio_button;
        item
          text = 'sinus';
          output = b1;
        end_item;
        item
          text = 'náhodný šum';
          output = b2;
        end_item;
        colors
          paper = white;
        end_colors;
      end_multi_switch;

### Nativní procedury přístroje multi_switch

    Update()

Nastavení přístroje do stavu daného jeho výstupními datovými elementy.

    Update( SetOutput : boolean )

Nastavení přístroje podle aktuálního stavu jeho výstupního datového elementu. Parametr SetOutput určuje, budou-li nová data zpětně zapsána do výstupního datového elementu.

    SetIndex( real )

Nastavení přístroje do stavu daného parametrem Index včetně zápisu do výstupních datových elementů. První definovaný item má Index = 1.

    MoveTo( x, y : real )

Posunutí přístroje na pozici x, y. Velikosti hodnot x a y jsou v bodech obrazovky.

    Hide()

Skrytí viditelného přístroje.

    Show()

Zobrazení skrytého přístroje.

    DeselectAll()

Nastavení objektu v módu menu do stavu, kdy není vybrána žádná položka.

    Disable()

Zablokování přístroje. Po zavolání této procedury aktivní plocha ovládacího prvku sešedne (bude překryta 50% rastrem) a přístroj nebude reagovat na některé události od myši a klávesnice.

    Enable()

Odblokování přístroje dříve zablokovaného metodou Disable(). Objekt se překreslí do původního vzhledu.

    DisableMenuItem( ItemIndex : number )

V módu menu a menu_bar je znepřístupněna položka daná parametrem ItemIndex.

    EnableMenuItem( ItemIndex : number )

V módu menu a menu_bar je opět zpřístupněna dříve zakázaná položka daná parametrem ItemIndex.

    SetSelIndex( ItemIndex : real )

Volba položky dané parametrem ItemIndex.

    Blink( BlinkingActive : boolean )

Zapnutí a vypnutí blikání. Voláním procedury Blink s parametrem BlinkingActive nastaveným na true začne přístroj blikat (tj. střídavě se překreslovat s použitím barevných sad colors a blink_colors). Blikání je možno zastavit voláním procedury Blink s parametrem BlinkingActive nastaveném na hodnotu false. Frekvence blikání je dána parametrem přístroje blink_rate.

    ToggleBlink()

Přepnutí vzhledu přístroje do alternativní sady barev, tedy z colors do blink_colors nebo naopak podle okamžitého stavu. Po zastavení blikání se přístroj vždy vrátí do standardní barevné sady bez ohledu na předchozí volání procedury ToggleBlink.

### Událostní procedury přístroje multi_switch

Přístroj může volat standardní událostní procedury:

    OnActivate()
    OnMouseDown( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
    OnMouseDoubleClick( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
    OnMouseUp( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
    OnMouseMove( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
    OnKeyDown( Character : cardinal )
    OnKeyRepeat( Character : cardinal )
    OnKeyUp( Character : cardinal )
    OnSelect()
    OnDeselect()
    OnShow()
    OnHide()
    OnNewPosition( RectX, RectY, RectW, RectD : integer )
    OnWindowMinimize()
    OnWindowMaximize()
    OnWindowRestore( WasMinimized, WasMaximized : boolean )
    OnWindowClose()

### Specifické událostní procedury přístroje

    OnIndex( Index : real )

Procedura je zavolána při každé volbě položky. Položka která je identifikována hodnotou parametru Index (počínaje číslem 1).

    OnIndexOutput( Index : real; &Output: boolean )

Procedura je zavolána pro každou položku, která je identifikována hodnotou parametru Index (počínaje číslem 1). Má-li tedy multi_switch např. 10 položek, bude procedura zavolána v každém časovém kroku desetkrát. V proměnné Output je hodnota, která bude po dokončení procedury zobrazena a případně zapsána do výstupního datového elementu. Tuto hodnotu je možno v proceduře změnit.