Menu

English

MenuはアプリケーションメニューとOS標準のメニュー項目を作成します。

表示例

Menu on Ubuntu
Ubuntu
Menu on Windows
Windows
Menu on macOS
macOS

実行例

require "uing"

UIng.init

UIng::Menu.new("File") do
  append_item("Open") do
    set_shortcut('O', UIng::Modifiers::Primary)
    on_clicked do |window|
      window.try &.open_file
    end
  end
  append_separator
  append_preferences_item do
    on_clicked do |window|
      window.try &.msg_box("Preferences", "Preferences clicked")
    end
  end
  append_separator
  append_quit_item
end

UIng::Menu.new("Edit") do
  append_check_item("Check", checked: false) do
    on_clicked do |_menu_window|
      # No-op
    end
  end
  append_separator
  append_item("Click") do
    on_clicked do |window|
      window.try &.msg_box("Click", "Click menu clicked")
    end
  end
end

UIng::Menu.new("Help") do
  append_about_item do
    on_clicked do |window|
      window.try &.msg_box("About", "Menu example")
    end
  end
end

# Window must be created after menu finalized.
Window = UIng::Window.new("Menu Example", 300, 50, menubar: true) do
  on_closing do
    UIng.quit
    true
  end

  show
end

UIng.on_should_quit do
  Window.destroy unless Window.released?
  true
end

{% if flag?(:darwin) %}
  label = UIng::Label.new("The Mac menu bar is at the top of the screen.")
  Window.child = label
{% end %}

UIng.main

UIng.uninit

使い方

  • メニュー項目には次の種類があります。

    種類 作成メソッド 用途
    通常項目 append_item(name) コマンドを実行します。
    チェック項目 append_check_item(name, checked:) オン/オフの状態を表します。checked?とchecked=で状態を読み書きできます。
    Preferences項目 append_preferences_item 設定画面を開きます。
    About項目 append_about_item アプリケーション情報を表示します。
    Quit項目 append_quit_item アプリケーションを終了します。終了処理はUIng.on_should_quitで設定します。
    区切り append_separator 関連する項目のグループを視覚的に分けます。

append_item、append_check_item、append_preferences_item、append_about_item、append_quit_itemには、生成したMenuItemを設定するブロックも渡せます。ブロック内ではMenuItemのメソッドを直接呼べ、必要なら|item|で項目を受け取れます。戻り値はブロックの結果によらずMenuItemです。

UIng::Menu.new("File") do
  append_item("Open") do
    set_shortcut('O', UIng::Modifiers::Primary)
    on_clicked { |window| window.try &.open_file }
  end
end

チェック項目はappend_check_item("Labels", checked: true) do ... endで初期状態を指定できます。Quit項目の設定ブロックでもon_clickedは使用できず、終了処理はUIng.on_should_quitで設定します。

  • 最初のWindowを作る前にすべてのMenuを構築し、Windowへmenubar: trueを指定します。
  • 最初のWindowを作る前にitem.set_shortcut('O', UIng::Modifiers::Primary)でショートカットを設定できます。PrimaryはmacOSではCommand、Windows/LinuxではControlです。解除にはitem.clear_shortcutを使います。
  • キーにはASCIIの英字・数字、UIng::ExtKey::F1~F12、Delete、矢印キーを指定できます。F1~F12以外にはPrimary、Ctrl、Altのいずれかが必要で、Shiftを追加できます。Super、Primary | Ctrl、重複するショートカットは使用できません。
  • プラットフォーム側の操作ではWindowがない場合があるため、コールバックには省略可能なWindowが渡されます。
  • item.clear_on_clickedはitem.on_clicked(nil)と同じです。クリック時のコールバックを解放し、項目は引き続き使用できます。どちらもメニューから項目を削除しません。Quit項目には代わりにUIng.clear_on_should_quitを使います。
  • Preferences、About、QuitはOSごとのメニュー規約を吸収する標準項目です。表示名、配置、区切り線はOSによって異なり、追加したMenu内の順序どおりに表示されるとは限りません。
  • append_preferences_item、append_about_item、append_quit_itemは、それぞれアプリケーション全体で1つだけ追加できます。

APIリファレンス · Galleryソース