Gtk.stock устарел, какая альтернатива?

Я учился разрабатывать для Gtk, и большинство примеров в Интернете предполагают использование иконок Gtk.stock. Однако при его использовании появляются предупреждения о том, что он устарел, и я не могу найти альтернативу этим значкам.

Примеры кода:

    open_button:Gtk.ToolButton = new ToolButton.from_stock(Stock.OPEN)
    open_button.clicked.connect (openfile)

    new_button:Gtk.ToolButton = new ToolButton.from_stock(Stock.NEW)
    new_button.clicked.connect (createNew)

    save_button:Gtk.ToolButton = new ToolButton.from_stock(Stock.SAVE)
    save_button.clicked.connect (saveFile)

Это генерирует ошибку как:

   /tmp/text_editor-exercise_7_1.vala.c:258:2: warning: 'GtkStock' is deprecated [-Wdeprecated-declarations]
     _tmp1_ = (GtkToolButton*) gtk_tool_button_new_from_stock (GTK_STOCK_OPEN);

Какая альтернатива и как она будет выглядеть в приведенном выше коде?


person lf_araujo    schedule 23.04.2016    source источник
comment
Замена названа значками в соответствии со спецификацией именования freedesktop; используйте Gtk.ToolButton.new() в сочетании с Gtk.Image.from_icon_name(). В документации C API есть предложение рядом с каждым товаром в наличии.   -  person andlabs    schedule 23.04.2016
comment
@andlabs, почему бы тебе не опубликовать ответ?   -  person oldtechaa    schedule 23.04.2016
comment
@andlabs Это действительно должен быть ответ, а не комментарий.   -  person Jens Mühlenhoff    schedule 23.04.2016
comment
Я комментирую, прежде чем ответить, чтобы сначала убедиться, что у меня есть правильный ответ, а не тратить ответ на то, что не работает. Как только я получаю подтверждение от спрашивающего, я делаю ответ, возможно, более конкретный. (То есть, если я не буду абсолютно уверен в ответе.) При этом, если здесь дела обстоят иначе, я изменю свои методы.   -  person andlabs    schedule 25.04.2016


Ответы (1)


GTK+3 перешел на freedesktop.org Именование значков Спецификация и интернационализированные ярлыки. В качестве примера возьмем Gtk.Stock.OPEN. документация GNOME Developer для GTK_STOCK_OPEN дает две замены:

GTK_STOCK_OPEN устарел с версии 3.10 и не должен использоваться в новом коде. Используйте именованную иконку «document-open» или метку «_Open».

Метод именованных значков

Метод именованного значка будет выглядеть примерно так:

var open_icon = new Gtk.Image.from_icon_name( "document-open",
                                              IconSize.SMALL_TOOLBAR
                                              )
var open_button = new Gtk.ToolButton( open_icon, null )

Метод этикетки

Метод метки использует gettext для перевода метки на текущий язык выполнения программы. На это указывает подчеркивание перед меткой. Строка в вашей программе будет:

var open_button = new Gtk.ToolButton( null, dgettext( "gtk30", "_Open") )

gettext использует домены, которые представляют собой файлы, содержащие переводы. Домен Gtk+3 — gtk30. Вам также потребуется добавить строку в начале вашей программы, чтобы изменить локаль по умолчанию для языка C, то есть американский английский ASCII, на локаль среды выполнения:

init
    Intl.setlocale()

Чтобы скомпилировать программу Genie, вам нужно установить домен по умолчанию для gettext. Обычно это ничего не устанавливает:

valac -X -DGETTEXT_PACKAGE --pkg gtk+-3.0 my_program.gs

Когда вы запустите свою программу, вы получите «_Open», переведенный на ваш язык. Вы также можете изменить локаль. Если у вас установлена ​​французская локаль, запустите программу с помощью:

LC_ALL=fr ./my_program

будет иметь метку "_Open" на французском языке.

Вы можете увидеть в примерах _( "_OPEN" ). _() — это функция, аналогичная dgettext, но использующая домен по умолчанию. Вы можете захотеть сохранить домен по умолчанию для файла перевода для вашей собственной программы. Использование _( "_translate me" ) немного меньше, чем dgettext( "mydomain", "_translate me" ). Чтобы установить домен по умолчанию в Genie, добавьте строку перед init:

const GETTEXT_PACKAGE:string = "mydomain"

init
    Intl.setlocale()
person AlThomas    schedule 23.04.2016