Как упаковать кнопку в HeaderBar с помощью Genie?
Фон
Моя цель - улучшить текстовый редактор в качестве упражнения. Он работает нормально после добавления HeaderBar, однако я не могу найти способ упаковать в него кнопки.
Код
uses
Granite.Widgets
Gtk
init
Gtk.init (ref args)
var app = new Application ()
app.show_all ()
Gtk.main ()
// This class holds all the elements from the GUI
class Application : Gtk.Window
_view:Gtk.TextView
construct ()
// Prepare Gtk.Window:
this.window_position = Gtk.WindowPosition.CENTER
this.destroy.connect (Gtk.main_quit)
this.set_default_size (400, 400)
// Headerbar definition
headerbar:Gtk.HeaderBar = new Gtk.HeaderBar()
headerbar.show_close_button = true
headerbar.set_title("My text editor")
// Headerbar buttons
var open_button = new ToolButton.from_stock(Stock.Open)
// Add everything to the toolbar
open_button.pack_start ()
show_all ()
this.set_titlebar(headerbar)
// Box:
box:Gtk.Box = new Gtk.Box (Gtk.Orientation.VERTICAL, 1)
this.add (box)
// A ScrolledWindow:
scrolled:Gtk.ScrolledWindow = new Gtk.ScrolledWindow (null, null)
box.pack_start (scrolled, true, true, 0)
// The TextView:
_view = new Gtk.TextView ()
_view.set_wrap_mode (Gtk.WrapMode.WORD)
_view.buffer.text = "Lorem Ipsum"
scrolled.add (_view)
// A Button:
button:Gtk.Button = new Gtk.Button.with_label ("Print content to
stdout")
box.pack_start (button, false, true, 0)
button.clicked.connect (clicked)
// This is a simple stub function to take care of the click
def clicked ()
stdout.puts (_view.buffer.text)
stdout.putc ('\n')
ошибка
Когда используется pack_start (см. Ниже), я получаю сообщение об ошибке:
text_editor-exercise_7_1.gs:136.3-136.39: error: Access to instance member `Gtk.HeaderBar.pack_start' denied
Подобные ошибки возникают, когда я использую HeaderBar.pack_start или button_name.pack_start.
Вопрос
- Я ошибаюсь, полагая, что pack_start должен использоваться с HeaderBars?
Вторая небольшая проблема связана с использованием иконок Stock. По какой-то причине я не могу получить доступ к Stock.Open.
Наконец, есть ли другой источник информации о HeaderBar? Valadoc немногочислен в этой теме (нет примеров или шаблонов).
1 ответ
Решение
Вы пытаетесь позвонить pack_start
на кнопке, а не на панели заголовка:
// Add everything to the toolbar
open_button.pack_start ()
Правильный код:
headerbar.pack_start (open_button)