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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 180

Автор НСйл ΠœΡΡ‚ΡŒΡŽ

 renderer = gtk_cell_renderer_text_new();

 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),

  COLUMN_TITLE, "Title", renderer, "text",

  COLUMN_TITLE, NULL);

 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),

  COLUMN_ARTIST, "Artist", renderer, "text",

  COLUMN_ARTIST, NULL);

 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),

  COLUMN_CATALOGUE, "Catalogue", renderer, "text",

  COLUMN_CATALOGUE, NULL);

 gtk_container_add(GTK_CONTAINER(window), view);

 gtk_widget_show_all(window); gtk_main();

 return 0;

}

Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ GtkTreeView ΠΊΠ°ΠΊ основной ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ вашСго прилоТСния для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дисками, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ содСрТимоС GtkTreeView Π² соотвСтствии с запросами ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дисков.

ΠœΡ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ ΠΎΠ±Π·ΠΎΡ€ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² GTK+ ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌ нашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ: срСду GNOME. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ мСню Π² вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ GNOME ΠΈ ΠΊΠ°ΠΊ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ GNOME ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ стола GNOME.

Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ GNOME

ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ GTK+ спроСктирован ΠΊΠ°ΠΊ Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌΡƒ столу, Ρ‚.Π΅. GTK+ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄ΠΎΠΏΡƒΡ‰Π΅Π½ΠΈΠΉ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ выполняСтся Π² срСдС GNOME ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π² систСмС Linux. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ инструмСнтов GTK+ ΠΌΠΎΠΆΠ½ΠΎ с ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ пСрСнСсти для выполнСния Π² ОБ Windows ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ систСмС. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ GTK+ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ срСдств для связывания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ столом, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ срСдства сохранСния настройки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Π°ΠΏΠΏΠ»Π΅Ρ‚Ρ‹ (Π°ΠΏΠΏΠ»Π΅Ρ‚Ρ‹ β€” это нСбольшиС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° ΠΊΡ€Π°Π΅Π²Ρ‹Ρ… панСлях (edge panels)).

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ срСды Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ GNOME, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ GTK+ ΠΈ Π·Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Π΅Π³ΠΎ части Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΈΠΌΠΈ Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ расскаТСм, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² GNOME.

ΠŸΠ΅Ρ€Π΅Π΄ использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ GNOME ΠΈΡ… слСдуСт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ запускС Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ‹ поступали с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ GTK+. Π’Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ gnome_program_init Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ gtk_init Π² чистых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… GTK+.

Π­Ρ‚Π° функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ app_id ΠΈ Π°Ρ€Ρ€_version, примСняСмыС для описания вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² срСдС GNOME, module_info, ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΠΉ GNOME ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ свойства прилоТСния, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ NULL-Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ список ΠΏΠ°Ρ€ "имя/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅".

GnomeProgram* gnome_program_init(const char *app_id,

 const char *app_version, const GnomeModuleInfΠΎ *module_infΠΎ,

 int argc, char **argv, const char *first_property_name, ...);

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ список свойств позволяСт Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ характСристики, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для поиска растровой Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ.

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 16.8.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 16.8. Окно GNOME

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰ΡƒΡŽ срСдства GNOME, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся GNOME-Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° GtkWindow Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ GnomeApp.

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π΅ gnome1.c:

#include <gnome.h>


int main(int argc, char* argv[]) {

 GtkWidget *app;

 gnome_program_init("gnome1", "1.0", MODULE, argc, argv, NULL);

 app = gnome_app_new("gnome1", "The Window Title");

 gtk_widget_show(app);

 gtk_main();

 return 0;

}

Для компиляции Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ GNOME, поэтому ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ libgnomeui ΠΈ libgnome Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ pkg-config:

$ gcc gnome1.с -о gnome1 `pkg-config --cflags --libs libgnome-2.0 libgnomeui-2.0`

Π’ΠΈΠ΄ΠΆΠ΅Ρ‚ GnomeApp Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ возмоТности GtkWindow ΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ вставку мСню, ΠΏΠ°Π½Π΅Π»Π΅ΠΉ инструмСнтов ΠΈ строки состояния вдоль Π½ΠΈΠΆΠ½Π΅Π³ΠΎ края ΠΎΠΊΠ½Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ GtkWindow, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρƒ GnomeApp Π»ΡŽΠ±ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° GtkWindow. Π”Π°Π»Π΅Π΅ Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с созданиСм мСню ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ строку состояния Π² ваш Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ инструмСнтов GTK+ для создания мСню, Π½ΠΎ срСда GNOME прСдоставляСт ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ структуры ΠΈ макросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сущСствСнно ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ эту Π·Π°Π΄Π°Ρ‡Ρƒ. Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ описываСтся, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ мСню срСдствами GTK+.

МСню GNOME

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ строки Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ мСню Π² срСдС GNOME Π½Π° ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ просто. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚ Π² строкС мСню прСдставляСтся ΠΊΠ°ΠΊ массив структур GNOMEUIInfo, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива соотвСтствуСт ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ мСню. НапримСр, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ мСню File (Π€Π°ΠΉΠ»), Edit (ΠŸΡ€Π°Π²ΠΊΠ°) ΠΈ View (Π’ΠΈΠ΄), Ρ‚ΠΎ Ρƒ вас Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚Ρ€ΠΈ массива, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… содСрТимоС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ мСню.

ПослС опрСдСлСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… мСню создаСтся строка мСню ΠΊΠ°ΠΊ таковая с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ссылок Π½Π° эти массивы Π² Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΌ массивС структур GNOMEUIInfo.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° GNOMEUIInfo Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТна ΠΈ нуТдаСтся Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… пояснСниях.

typedef struct {

 GnomeUIInfoType type;

 gchar const *label;

 gchar const *hint;

 gpointer moreinfΠΎ;

 gpointer user_data;

 gpointer unused_data;

 GnomeUIPixmapType pixmap_type;

 gconstpointer pixmap_info;

 guint accelerator_key;

 GdkModifierType ac_mods;

 GtkWidget *widget;

} GnomeUIInfo;

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π² структурС, type, опрСдСляСт Ρ‚ΠΈΠΏ элСмСнта мСню, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСтся Π΄Π°Π»Π΅Π΅. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· 11 Ρ‚ΠΈΠΏΠΎΠ² GnomeUIInfΠΎΠ’ΡƒΡ€Π΅, опрСдСляСмых срСдой GNOME ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π». 16.3.


Π’Π°Π±Π»ΠΈΡ†Π° 16.3

Π’ΠΈΠΏΡ‹ GnomeUIInfΠΎΠ’ΡƒΡ€Π΅ ОписаниС GNOME_APP_UI_ENDOFINFO ΠžΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ этот элСмСнт β€” послСдний ΠΏΡƒΠ½ΠΊΡ‚ мСню Π² массивС GNOME_APP_UI_ITEM ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚ мСню ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ, Ссли Π΅ΠΌΡƒ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ элСмСнт GNOME_APP_UI_RADIOITEMS GNOME_APP_UI_TOGGLEITEM ΠŸΡƒΠ½ΠΊΡ‚ мСню Π² Π²ΠΈΠ΄Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ-ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ-Ρ„Π»Π°ΠΆΠΊΠ° GNOME_APP_UI_RADIOITEMS Π“Ρ€ΡƒΠΏΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ зависимых ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ GNOME_APP_UI_SUBTREE ΠžΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ элСмСнт прСдставляСт собой подмСню. Π—Π°Π΄Π°ΠΉΡ‚Π΅ moreinfo для указания Π½Π° массив подмСню GNOME_APP_UI_SEPARATOR ВставляСт Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ линию Π² мСню GNOME_APP_UI_HELP Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ список Ρ‚Π΅ΠΌ справки для использования Π² мСню Help (Π‘ΠΏΡ€Π°Π²ΠΊΠ°) GNOME_APP_UI_BUILDER_DATA Π—Π°Π΄Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ построСния (builder data) для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов GNOME_APP_UI_ITEM_CONFIGURABLE НастраиваСмый ΠΏΡƒΠ½ΠΊΡ‚ мСню GNOME_APP_UI_SUBTREE_STOCK Π’Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ GNOME_APP_UI_SUBTREE Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ надписи слСдуСт ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ gnome-libs GNOME_APP_UI_INCLUDE Π’Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ GNOME_APP_UI_SUBTREE Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ мСню, Π° Π½Π΅ Π² подмСню

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнты структуры ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ тСкст ΠΏΡƒΠ½ΠΊΡ‚Π° мСню ΠΈ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ подсказки. (Подсказка выводится Π² строкС состояния, Ρƒ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ края ΠΎΠΊΠ½Π°.)

НазначСниС элСмСнта moreinfo зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ°. Π’ случаС ITEM ΠΈ TOGGLEITEM ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ слСдуСт Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню. Для RADIOITEMS ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° массив структур GnomeUIInfo, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ.

user_data β€” ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ pixmap_type ΠΈ pixmap_info ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ мСню Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²ΡƒΡŽ ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, a accelerator_key ΠΈ ac_mods ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Ρ‹ΠΉ эквивалСнт ΠΏΡƒΠ½ΠΊΡ‚Π° мСню.

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, элСмСнт widget примСняСтся для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ хранСния указатСля Π½Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ создания мСню.

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 16.9.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 16.9. МСню GNOME

Π’Ρ‹ смоТСтС ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ мСню с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НазовитС Π΅Π΅ menu1.с.

#include <gnome.h>

void closeApp(GtkWidget *window, gpointer data) {

 gtk_main_quit();

}

1. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ для ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² мСню Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, Π½Π°Π·Π²Π°Π½Π½ΡƒΡŽ item_clicked:

void item clicked(GtkWidget *widget, gpointer user_data) {

 printf("Item Clicked!\n");

}

2. Π”Π°Π»Π΅Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ опрСдСлСния мСню. Π£ вас Π΅ΡΡ‚ΡŒ подмСню, мСню Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΈ массив строки мСню:

static GnomeUIInfo submenu[] = {

 {GNOME_APP_UI_ITEM, "SubMenu", "SubMenu Hint",

  GTK_SIGNAL_FUNC(item_clicked), NULL, NULL, 0, NULL, 0, 0, NULL},

 {GNOME_APP_UI_ENDOFINFO, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0,

  NULL}

};

static GnomeUIInfo menu[] = {

 {GNOME_APP_UI_ITEM, "Menu Item 1", "Menu Hint",

  NULL, NULL, NULL, 0, NULL, 0, 0, NULL},

 {GNOME_APP_UI_SUBTREE, "Menu Item 2", "Menu Hint",

  submenu, NULL, NULL, 0, NULL, 0, 0, NULL},

 {GNOME_APP_UI_ENDOFINFO, NULL, NULL, null,