Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux: ПолноС руководство». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 136

Автор ДСнис ΠšΠΎΠ»ΠΈΡΠ½ΠΈΡ‡Π΅Π½ΠΊΠΎ

 β€’ ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: calc β€” Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ исполнимый Ρ„Π°ΠΉΠ».

 β€’ Π€Π°ΠΉΠ» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: calc.glade.

 β€’ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ исходного ΠΊΠΎΠ΄Π°: src (~/Projects/Calc/src).

 β€’ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ: pixmap.

 β€’ Π―Π·Ρ‹ΠΊ: Π‘.

 β€’ Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Gnome: Π”Π°.

♦ Π’ΠΊΠ»Π°Π΄ΠΊΠ° Β«ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ CΒ»

 β€’ Π’сС ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ~/Projects/Calc Π±ΡƒΠ΄Π΅Ρ‚ создан Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° calc.glade. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ описываСт наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° языкС XML. Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ этого Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 25.1 β€” просто для ΠΎΠ±Ρ‰Π΅Π³ΠΎ развития.

Листинг 25.1. Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° calc.glade

<?xml version="1.0"?>

<GTK-Interface>

 <project>

  <name>Calc</name>

  <program_name>calc</program_name>

  <directory></directory>

  <source_directory>src</sourceβ€”directory>

  <pixmaps_directory>pixmaps</pixmaps_directory >

  <language>C</language>

  <gnome_support>True</gnome_support>

  <gettext_support>True</gettext_support>

 </project>

 <widget>

  <class>GtkWindow</class>

  <name>window1</name>

  <border_width>7</border_width>

  <title>window1</title>

  <type>GTK_WINDOW_TOPLEVEL</type>

  <position>GTK_WIN_POS_NONE</position>

  <modal>False</modal>

  <allow_shrink>False</allow_shrink>

  <allow_grow>True</allow_grow>

  <auto_shrink>False</auto_shrink>

  <widget>

   <class>GtkVBox</class>

   <name>vbox2</name>

   <homogeneous>False</homogeneous>

   <spacing>0</spacing>

   <widget>

    <class>GtkEntry</class>

    <name>entry1</name>

    <height>50</height>

    <can_focus>True</can_focus>

    <editable>True</editable>

    <text_visible>True</text_visible>

    <text_max_length>0</text_max_length>

    <text>0</text>

    <child>

     <padding>0</padding>

     <expand>False</expand>

     <fill>False</fill>

    </child>

   </widget>

   ...

  </widget>

  ...

 </widget>

 ...

</GTK-Interface>

Но ΠΊΡ€ΠΎΠΌΠ΅ этого Ρ„Π°ΠΉΠ»Π° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Calc Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅Ρ‚. А Π³Π΄Π΅ ΠΆΠ΅ исходный ΠΊΠΎΠ΄? А Π³Π΄Π΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ? Π§Ρ‚ΠΎΠ±Ρ‹ Glade сгСнСрировала исходный ΠΊΠΎΠ΄, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ Glade. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ calc Π±ΡƒΠ΄Π΅Ρ‚ создана структура ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², показанная Π½Π° рис. 24.8.

Рис. 24.8. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π’ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ macros находятся макросы для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ срСды Gnome. ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ po ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для вас β€” Π² Π½Π΅Π³ΠΎ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π²Π½ΠΎΡΠΈΡ‚ΡŒ свСдСния ΠΎΠ± измСнСниях Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ src содСрТит исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

О ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ src Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. Π’ Π½Π΅ΠΌ находятся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹:

♦ interface.*, support.* β€” эти Ρ„Π°ΠΉΠ»Ρ‹ сгСнСрированы Glade, ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡ… Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ;

♦ callback.* β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ. АвтоматичСски сгСнСрированныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Π΅Π»Π°Π»Π°, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» callback.c;

♦ make.c β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ„Π°ΠΉΠ», Ссли Π²Π°ΠΌ это Π½ΡƒΠΆΠ½ΠΎ.

Рассмотрим Ρ„Π°ΠΉΠ» callback.c β€” Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Glade создала для вас Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π°:

Листинг 25.2. Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Ρ„Π°ΠΉΠ»Π° callback.c

#ifdef HAVE_CONFIG_H

# include <config.h>

#endif


#include <gnome.h>

#include "callbacks.h"

#include "interface.h"

#include "support.h"


void

on_button_clicked (GtkButton *button,

 gpointer user_data) {

}


void

ce_button_clicked (GtkButton *button,

 gpointer user_data) {

}

...


void

on_button9_clicked (GtkButton *button,

 gpointer user_data) {

}

Вписав Π² эти Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ΄, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π²Π°ΠΌ дСйствия, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Для этого ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ calc ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ make.

24.4. БозданиС мСню

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ стандартноС мСню прилоТСния, состоящСС ΠΈΠ· ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² Π€Π°ΠΉΠ», ΠŸΡ€Π°Π²ΠΊΠ°, Π’ΠΈΠ΄ ΠΈ Ρ‚.ΠΏ., ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²ΠΈΠ΄ΠΆΠΈΡ‚ Окно прилоТСния Gnome (рис. 24.9) β€” Π²Ρ‹ Π΅Π³ΠΎ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° страничкС Π²ΠΈΠ΄ΠΆΠΈΡ‚ΠΎΠ² Gnome.

Рис. 24.9. Окно прилоТСния Gnome

Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ шаблон ΠΎΠΊΠ½Π° с мСню, панСлью инструмСнтов ΠΈ строкой статуса. Π£Π΄ΠΎΠ±Π½ΠΎ?

Если ΠΆΠ΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ нСстандартноС мСню, Ρ‚ΠΎ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π²ΠΈΠ΄ΠΆΠΈΡ‚ МСню, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ основных Π²ΠΈΠ΄ΠΆΠΈΡ‚ΠΎΠ² ΠΎΠΊΠ½Π° ΠŸΠ°Π»ΠΈΡ‚Ρ€Π°. Π’ ΠΎΠΊΠ½Π΅ свойств мСню Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠŸΡ€Π°Π²ΠΊΠ° мСню. Π’ ΠΎΡ‚ΠΊΡ€Ρ‹Π²ΡˆΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню.

Для создания ΠΏΡƒΠ½ΠΊΡ‚Π° мСню Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

♦ ΠœΠ΅Ρ‚ΠΊΠ° β€” эту надпись ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ.

♦ Π˜ΠΌΡ β€” это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню.

♦ ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ β€” имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

♦ Π˜ΠΊΠΎΠ½ΠΊΠ° β€” ΠΈΠΊΠΎΠ½ΠΊΠ°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ мСню.

♦ ΠŸΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° β€” ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ эта подсказка отобраТаСтся Π² строкС статуса ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню.

♦ Π’ΠΈΠΏ элСмСнта β€” ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ, зависимый (Ρ€Π°Π΄ΠΈΠΎΠΊΠ½ΠΎΠΏΠΊΠ°) ΠΈΠ»ΠΈ нСзависимый (Ρ„Π»Π°ΠΆΠΎΠΊ) ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ.

♦ Π£ΡΠΊΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒ β€” горячая комбинация клавиш.

Рис. 24.10. Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ мСню

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стрСлок Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² мСню.

24.5. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Π²ΠΈΠ΄ΠΆΠΈΡ‚Ρ‹

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Ρ… Π²ΠΈΠ΄ΠΆΠΈΡ‚ΠΎΠ² Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС, Ρ‡Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ описано Π² этом ΠΏΡƒΠ½ΠΊΡ‚Π΅, β€” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠΈΡ‚ ΠΏΠΎ-своСму интСрСсСн. Но ΠΌΠ½Π΅ большС всСго ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΈΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠΈΡ‚Ρ‹:

♦ Π¨ΠΊΠ°Π»Π° β€” Π²ΠΈΠ΄ΠΆΠΈΡ‚, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ спидомСтр, находится Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ элСмСнтов Gnome.

♦ Π’Ρ‹Π±ΠΎΡ€ Ρ†Π²Π΅Ρ‚Π° β€” Ссли этот Π²ΠΈΠ΄ΠΆΠΈΡ‚ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅, Ρ‚ΠΎ получится ΠΎΠΊΠ½ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° Ρ†Π²Π΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° стандартноС ΠΎΠΊΠ½ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° Ρ†Π²Π΅Ρ‚Π° срСды Gnome (Π²ΠΊΠ»Π°Π΄ΠΊΠ° Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ),

♦ Π’Ρ‹Π±ΠΎΡ€ ΡˆΡ€ΠΈΡ„Ρ‚Π° β€” позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡˆΡ€ΠΈΡ„Ρ‚ (Π²ΠΊΠ»Π°Π΄ΠΊΠ° Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ).

♦ Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ свойств β€” ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ свойств (Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ свойств ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°), содСрТащСС Π²ΠΊΠ»Π°Π΄ΠΊΠΈ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ OK, ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ, Π‘ΠΏΡ€Π°Π²ΠΊΠ° (Π²ΠΊΠ»Π°Π΄ΠΊΠ° Gnome).

Рис. 24.11. Шкала

Рис. 24.12. Π’Ρ‹Π±ΠΎΡ€ Ρ†Π²Π΅Ρ‚Π°

Рис. 24.13. Π’Ρ‹Π±ΠΎΡ€ ΡˆΡ€ΠΈΡ„Ρ‚Π°

Рис. 24.14. Окно свойств

Π“Π»Π°Π²Π° 25

ΠŸΠ°ΠΊΠ΅Ρ‚ Dialog

25.1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Dialog?

ΠŸΠ°ΠΊΠ΅Ρ‚ dialog слуТит для Π²Ρ‹Π²ΠΎΠ΄Π° Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠΏ Π² сцСнариях bash. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈ Π² GTK+, Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΆΠΈΡ‚Π°ΠΌΠΈ. ΠŸΠ°ΠΊΠ΅Ρ‚ dialog позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠΈΡ‚Ρ‹:

♦ Infobox, Msgbox β€” выводят ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ сообщСния;

♦ Inputbox β€” ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π²Π²ΠΎΠ΄ тСкстовой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ;

♦ Calendar β€” позволяСт Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΄Π°Ρ‚Ρƒ;

♦ Radiolist β€” список зависимых ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ;

♦ Checklist β€” список нСзависимых ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ;

♦ Menubox β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ мСню;

♦ Gauge β€” шкала прогрСсса.

Установив ΠΏΠ°ΠΊΠ΅Ρ‚ dialog, Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /usr/share/doc/dialog-<вСрсия> Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² примСнСния этого Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

25.2. БообщСния

НачнСм с самого простого β€” отобраТСния Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… тСкстовых сообщСний. Для этой Ρ†Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° Π²ΠΈΠ΄ΠΆΠΈΡ‚Π° β€” Infobox ΠΈΠ»ΠΈ Msgbox. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ отличаСтся ΠΎΡ‚ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΆΠ΄Π΅Ρ‚ подтвСрТдСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΈ, Π° закрываСтся Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя. Π’ΠΈΠ΄ΠΆΠΈΡ‚ Msgbox ΠΆΠ΄Π΅Ρ‚, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΌΠ΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ OK ΠΈΠ»ΠΈ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Enter.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Π²ΠΈΠ΄ΠΆΠΈΡ‚Π° Msgbox:

Листинг 25.1. Π’ΠΈΠ΄ΠΆΠΈΡ‚ Msgbox

#!/bin/sh

DIALOG=${DIALOG=dialog}

$DIALOG --title "MESSAGE BOX" --clear \

--msgbox "Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ΠΆΠΈΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²Ρ‹Π²ΠΎΠ΄Π° \

сообщСний. Π–Π΄Π΅Ρ‚, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΌΠ΅Ρ‚ Enter" 10 41

case $? in

0)

 echo "OK";;

255)

 echo "НаТата ESC.";;

esac

Π’Π΅ΠΏΠ΅Ρ€ΡŒ разбСрСмся, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ --title ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ dialog Π·Π°Π΄Π°Π΅Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π²ΠΈΠ΄ΠΆΠΈΡ‚Π° (рис. 25.1) ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ --msgbox сообщаСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ‚ΠΈΠΏ Π²ΠΈΠ΄ΠΆΠΈΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ. ПослС этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ тСкст сообщСния, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Π’ тСкстС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (\b, \n, \t,\ a ΠΈ Π΄Ρ€.). ПослС сообщСния Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π²ΠΈΠ΄ΠΆΠΈΡ‚Π°.

Рис. 25.1. Π’ΠΈΠ΄ΠΆΠΈΡ‚ Msgbox

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ case провСряСт Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ dialog Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠ°Π» OK (ΠΈΠ»ΠΈ <Π’Π²ΠΎΠ΄>), Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 0, Π° Ссли ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Esc, Ρ‚ΠΎ 255.

Π’ΠΈΠ΄ΠΆΠΈΡ‚ Infobox слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Листинг 25.2. ИспользованиС Π²ΠΈΠ΄ΠΆΠΈΡ‚Π° Infobox