Dialog Box (Bài trước)

Có hai dạng Menu, hầu hết ở dạng thứ nhật các menu chính trong cửa số ứng dụng và các context menu xuất hiện khi nhấn phải chuột vào Entity ... Menu được tạo bằng cách gọi một phương thức trong module UI, sau đó cấu hình và định nghĩa các ứng xử của menu.

Sửa menu chính của SketchUp

Phía trên cửa sổ SketchUp, thấy các tiêu đề menu như File, Edit, View ..., mỗi mục đó trong code là một đối tượng Menu. Gọi phương thức menu trong module UI với tham số chuỗi tên menu, để tạo đối tượng menu. Ví dụ sau tạo đối tượng Menu tương ứng với menu "View"

view_menu = UI.menu "View"

Khi có đối tượng menu này có thể gọi các phương thức như:

add_item add_item(menu)
Để thêm một mục menu
menu = UI.menu('View')
menu.add_item("Xin Chào") { UI.messagebox "Xin chào", MB_OK }
add_item(command)
cmd = UI::Command.new("Xin chào 2") {
    UI.messagebox("Chào tiếp")
}
menu = UI.menu('View')
menu.add_item(cmd)
add_submenu add_submenu(title)
Thêm menu con
plugins_menu = UI.menu("View")
submenu = plugins_menu.add_submenu("Test")
submenu.add_item("Hello World") {
  UI.messagebox("Hi there!")
add_separator Thêm đường kẻ ngang phân cách
set_validation_proc set_validation_proc(menu) { ... }
Kiểm tra trạng thái hiện tại để xác định xem menu được hiện thị như thế nào, có thể trả về các giá trị: MF_ENABLED, MF_DISABLED, MF_CHECKED, MF_UNCHECKED, MF_GRAYED

Context menu trong SketchUp

Tạo ContextMenu bằng phương thức UI.add_context_menu_handler để nhận về menu context, sau đó sửa đổi nó, cú pháp

UI.add_context_menu_handler {
    |m|
    # các thao tác, như thêm menu item
    m.add_item("Hi")
    {

    }
}

Ví dụ: Menu context khi nhấn phải chuột vào các Entity có face đang chọn:

# 25.context_menu.rb
# load "/Users/xuanthulab/Desktop/learn-ruby/sketchup/25.context_menu.rb"
require 'sketchup.rb'
require 'extensions.rb'

# Hàm chuyển các face đang chọn có vật liệu tô màu xanh
def makegreen
    sel = Sketchup.active_model.selection
    sel.each do |e|
        if e.typename == "Face"
            e.material = [0, 255, 0]
        end
    end
end

# Hàm trả về MF_ENABLED nếu có face, MF_GRAYED nếu không
def check_face
    sel = Sketchup.active_model.selection
    ok = sel.find{ |e| e.typename == "Face"}
    ok ? MF_ENABLED : MF_GRAYED
end

# Truy cập và sửa đổi context
UI.add_context_menu_handler do |menu|
    # @type [Sketchup::Menu]
    menu = menu
    # thêm đường phân cách
    menu.add_separator
    # Thêm menu item
    item = menu.add_item("Face -> Xanh") { makegreen }
    menu.set_validation_proc(item) {
        check_face
    }
end

Command trong SketchUp Ruby

Trong SketchUp, một Command nó thi hành thông qua một mục chọn menu hay thanh công cụ. Khi có đối tượng Command bạn có thể liên kết nó với toolbar hay menu.

Ví dụ:

# Khởi tạo đối tượng command
cmd = UI::Command.new("Tester") {
  UI.messagebox("My Command")
}
# Tiêu đề khi đưa vào menu
cmd.menu_text = "My Command"
# Hàm thiết lập trạng thái nếu có lựa chọn thì enable
cmd.set_validation_proc {
  if Sketchup.active_model.selection.length == 0
    MF_GRAYED
  else
    MF_ENABLED
  end
}

# Thêm vào Menu Draw
UI.menu("Draw").add_item cmd

Đăng ký nhận bài viết mới
Dialog Box (Bài trước)