разные виджеты
ярлыки
ярлыки
в gtk используются часто и они достаточно
просты. ярлыки не создают никаких
сигналов ассоциированных с x window. если
вы хотите перехватить сигнал, то поместите
ярлык в eventbox widget
или button widget.
для создания нового ярлыка воспользуйтесь:
gtkwidget *gtk_label_new( const char *str );
gtkwidget *gtk_label_new_with_mnemonic( const char *str );
|
единственным параметром является
строка для отображения.
для изменения текста ярлыка после
создания, воспользуйтесь функцией:
void gtk_label_set_text( gtklabel *label,
const char *str );
|
первый аргумент - предварительно
созданный ярлык (приведение с использованием
макрокоманды gtk_label()), а второй -
новая строка.
пространство,
необходимое для новой строки будет
автоматически откорректировано если
нужно. вы можете использовать многострочные
ярлыки, помещая в конец каждой строки
знак перевода строки.
для нахождения текущей строки,
используйте:
const gchar* gtk_label_get_text( gtklabel *label );
|
не делайте пустой возвращённую строку,
это внутреннее использование gtk.
текст ярлыка выравнивается с помощью:
void gtk_label_set_justify( gtklabel *label,
gtkjustification jtype );
|
значение jtype:
gtk_justify_left
gtk_justify_right
gtk_justify_center (the default)
gtk_justify_fill
|
виджет ярлык может автоматически
создавать оболочку для линии текста.
это активизируется так:
void gtk_label_set_line_wrap (gtklabel *label,
gboolean wrap);
|
аргумент wrap принимает значение
true или false.
если вы хотите подчеркнуть ваш ярлык,
то вы можете установить образец:
void gtk_label_set_pattern (gtklabel *label,
const gchar *pattern);
|
аргумент pattern указывает как должно
выглядеть подчеркивание. оно может
состоять из символов подчеркивания и
пробелов. каждый символ подчеркивается
согласно образцу. например, строка "__
__" подчеркнула бы первые два символа
и последние.
|
если вы просто
хотите иметь подчеркнутый акселератор
("мнемонический") в вашем ярлыке,
вы должны использовать
gtk_label_new_with_mnemonic () или
gtk_label_set_text_with_mnemonic (), а не gtk_label_set_pattern
().
|
ниже дан короткий
пример для иллюстрации этих функций.
этот пример использует виджеты рамки
для лучшего стиля оформления ярлыков.
сейчас вы можете проигнорировать их,
но позже к ним придется вернуться
в секции frame.
в gtk + 2.0, тексты ярлыков
могут содержать разметку для шрифта и
другие атрибуты изменения текста, а
также текст ярлыка может быть выделен
(для копирования и вставки). эти
расширенные особенности здесь объясняться
не будут.
#include <gtk/gtk.h>
int main( int argc,
char *argv[] )
{
static gtkwidget *window = null;
gtkwidget *hbox;
gtkwidget *vbox;
gtkwidget *frame;
gtkwidget *label;
/* инициализируем gtk */
gtk_init (&argc, &argv);
window = gtk_window_new (gtk_window_toplevel);
g_signal_connect (g_object (window), "destroy",
g_callback (gtk_main_quit),
null);
gtk_window_set_title (gtk_window (window), "label");
vbox = gtk_vbox_new (false, 5);
hbox = gtk_hbox_new (false, 5);
gtk_container_add (gtk_container (window), hbox);
gtk_box_pack_start (gtk_box (hbox), vbox, false, false, 0);
gtk_container_set_border_width (gtk_container (window), 5);
frame = gtk_frame_new ("обычный ярлык");
label = gtk_label_new ("это обычный ярлык");
gtk_container_add (gtk_container (frame), label);
gtk_box_pack_start (gtk_box (vbox), frame, false, false, 0);
frame = gtk_frame_new ("многострочный ярлык");
label = gtk_label_new ("это многострочный ярлык.\nвторая строка\n" \
"третья строка");
gtk_container_add (gtk_container (frame), label);
gtk_box_pack_start (gtk_box (vbox), frame, false, false, 0);
frame = gtk_frame_new ("ярлык с левым выравниванием");
label = gtk_label_new ("это многострочный\n" \
"ярлык с левым выравниванием.\nтретья линия");
gtk_label_set_justify (gtk_label (label), gtk_justify_left);
gtk_container_add (gtk_container (frame), label);
gtk_box_pack_start (gtk_box (vbox), frame, false, false, 0);
frame = gtk_frame_new ("ярлык с правым выравниванием");
label = gtk_label_new ("это многострочный ярлык\nс правым выравниванием.\n\n" \
"четвёртая линия, (j/k)");
gtk_label_set_justify (gtk_label (label), gtk_justify_right);
gtk_container_add (gtk_container (frame), label);
gtk_box_pack_start (gtk_box (vbox), frame, false, false, 0);
vbox = gtk_vbox_new (false, 5);
gtk_box_pack_start (gtk_box (hbox), vbox, false, false, 0);
frame = gtk_frame_new ("ярлык с обертыванием линии");
label = gtk_label_new ("это пример ярлыка с обернутой линией(line-wrapped label). это " \
"не должно повлиять на вывод " /*большой пробел, чтобы проверить интервал */\
"ширина распределяется автоматически" \
" слова обернуты чтобы соответствовать " \
"пришло время для всех хороших людей занять " \
"свою сторону. " \
"шесть больных овец шестого шейха\n" \
" корректно поддерживаются многократные параграфы, " \
"и корректно добавляются "\
"дополнительные пробелы. ");
gtk_label_set_line_wrap (gtk_label (label), true);
gtk_container_add (gtk_container (frame), label);
gtk_box_pack_start (gtk_box (vbox), frame, false, false, 0);
frame = gtk_frame_new ("заполненный, обернутый ярлык");
label = gtk_label_new ("это пример line-wrapped, заполненного ярлыка. " \
"эта строчка занимает "\
"всю ширину отведенную для неё. " \
"это предложение доказывает "\
"мою особенность. это другое предложение. "\
"here comes the sun, do de do de do.\n"\
" это новый параграф.\n"\
" это еще один новый " \
"параграф . всё заканчивается, "\
"к сожалению.");
gtk_label_set_justify (gtk_label (label), gtk_justify_fill);
gtk_label_set_line_wrap (gtk_label (label), true);
gtk_container_add (gtk_container (frame), label);
gtk_box_pack_start (gtk_box (vbox), frame, false, false, 0);
frame = gtk_frame_new ("подчеркнутый ярлык");
label = gtk_label_new ("эта строчка подчёркнута!\n"
"эта строчка подчёркнута прерывистым способом");
gtk_label_set_justify (gtk_label (label), gtk_justify_left);
gtk_label_set_pattern (gtk_label (label),
"________________________ _ _____ ____ _ ____ __ __ __ _____ __");
gtk_container_add (gtk_container (frame), label);
gtk_box_pack_start (gtk_box (vbox), frame, false, false, 0);
gtk_widget_show_all (window);
gtk_main ();
return 0;
}
|
|