# switch_label

### Funkce

Nastavení logické hodnoty do výstupního datového elementu a současně zobrazení výsledků vyhodnocení logických výrazů pomocí ikon nebo textů.

### Syntax

      switch_label switch_label_name;
        rem = string;
        bubble = string;
        timer = timer_name;
        owner = owner_name;
        position = integer, integer, integer, integer;
        win_disable = [ identifier, . . . ];
        win_title = string;
        access = integer;
        tab_select = integer;
        send_same_data;
        output = boolean_dataelement;
        init_value = boolean;
        blink = boolean_expression;
        blink_rate = identifier;
        driver_exception = driver_name;
        receivers = [ identifier, . . . ];
        mono = integer, boolean;
        logic = identifier;
        item
          icon = file_name;
          font = font_identifier, integer, style_identifier;
          text = string;
          font = font_identifier, integer, style_identifier;
          text = string;
          expression = boolean_expression;
        end_item
        item
          . . .
        end_item;
        colors
          paper = color;
          ink = color;
          top_shadow = color;
          bottom_shadow = color;
        end_colors;
        blink_colors
          paper = color;
          ink = color;
          top_shadow = color;
          bottom_shadow = color;
        end_blink_colors;
      end_switch_label;

### Specifické parametry přístroje

- output
  Obsahuje jméno výstupního datového elementu, na který se bude posílat hodnota nastavená stisknutím tlačítka.
- init_value
  Definuje počáteční nastavení.
- 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
- driver_exception
  Jméno ovladače, od kterého jsou přijímány výjimky.
- receivers
  Obsahuje seznam všech přístrojů, kterým je zasílána zpráva při aktivitě přístroje.
- mono
  Parametry monostability přístroje, první je čas v sekundách a druhý logická hodnota aktivního stavu.
- logic
  Logika nastavování výstupu:
  set_true - po puštění tlačítka se nastaví vždy true
  set_false - po puštění tlačítka se nastaví vždy false
  set_flip_flop - po puštění tlačítka se nastaví střídavě true a false
  set_true_on_press - pouze při stisknutém tlačítku ja nastaveno na true, jinak je false
  set_false_on_press - pouze při stisknutém tlačítku ja nastaveno na false, jinak je true
- item a end_item
  Klíčová slova, která uzavírají parametry jedné položky.
- icon
  Uvozuje jméno souboru `*.ICO`. Definuje obrázek na povrchu tlačítka. Implicitně se zobrazí předdefinovaná ikona:
- text
  Text obsahuje libovolný řetězec znaků, jejichž význam bude odpovídat zobrazované hodnotě. Text může mít několik řádků, a na každý z nich může být použit jiný font písma. Stačí několikrát po sobě uvést parametry font a text, kde každá položka bude představovat jeden řádek,
  např.:
- font
  Je parametr určující font písma při vypisování true_text a false_text. 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).
- expression
  Zadání logických výrazů, kterými se řídí zobrazování jednotlivých položek.
- colors a blink_colors
  Seznam částí kresby přístroje, kterým lze měnit nastavení barvy:
  paper - pozadí tlačítka při true
  ink - písmo při true
  top_shadow - horní okraj při true
  bottom_shadow - dolní okraj při true

### Poznámka

Přístroj může zobrazovat hodnoty boolean dvěma různými způsoby. Jsou–li definovány parametry true_text a false_text, mají přednost před zadanými ikonami a přístroj zobrazuje tyto texty. Nejsou–li zadány texty, zobrazují se ikony.
Implicitně se nastaví parametry:

      position = 0, 0;
      access = 4294967295;
      tab_select = 4294967295;
      win_disable = zoom, maximize;
      init_value = false;
      mono = 0, false;
      logic = set_true;

### Příklad

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

      switch_label id_3;
        timer = 1;
        owner = panel_1;
        position = 15, 18;
        win_disable = zoom, maximize;
        output = b0;
        mono = 0.1, false;
        logic = set_flip_flop;
        item
          icon = RBLEDOFF.ICO;
          font = SYSTEM, 10, bold;
          text = 'první';
          b3 = b1;
        end_item;
        item
          icon = RRLEDON.ICO;
          font = SYSTEM, 10, bold;
          text = 'druhý';
          b4 = b2;
        end_item;
      end_switch_label;

### Nativní procedury přístroje switch_label

    SetIndex( Index : real )

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

    SetLook( Index : real )

Nastavení vzhledu přístroje do stavu daného parametrem Index bez zápisu hodnot do výstupních datových elementů.

    GetIndex( VAR Index : real )

Přečtení aktuálního stavu přístroje.

    MoveTo( x, y : real )

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

    NewRect( x, y, width, depth : real )

Zavoláním metody je možné přístroji změnit současně jeho pozici a velikost. Velikosti hodnot x, y, width, a depth jsou v bodech obrazovky.

    Hide()

Skrytí viditelného přístroje.

    Show()

Zobrazení skrytého přístroje.

    Select()

Přístroj je vybrán, takže do něj přichází všechny události od klávesnice. Přístroj má smysl vybrat, jen je-li ve viditelném panelu a je li sám viditelný. Má-li přístroj nastaven parametr tab_select, je možno jej ve vybraném stavu plně ovládat klávesnicí.

    SetValue( Value : boolean )

Zápis hodnoty Value do výstupního datového elementu.

    Update()

Nastavení přístroje podle aktuálního stavu jeho výstupního datového elementu.

    Update( SetOutput : boolean )

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

    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 switch_label

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 switch_label

    OnOutput( Output: boolean )

Procedura je zavolána před každým zápisem do výstupního datového elementu při stisku tlačítka operátorem.

    OnIndexOutput( Index : number; 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 switch_label 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 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. Procedura mení volána při stisku tlačítka operátorem, ale jen při jiné aktivaci přístroje.