2 điểm bởi GN⁺ 2024-08-17 | 1 bình luận | Chia sẻ qua WhatsApp

ImRAD

ImRAD là một trình dựng GUI dành cho thư viện ImGui. Nó có thể sinh và phân tích mã C++ để dùng trực tiếp trong ứng dụng. ImRAD có thể chạy trên Windows, Linux và MacOS.

Tính năng

ImRAD đang được phát triển tích cực và các tính năng chính như sau:

  • Hỗ trợ nhiều kiểu thiết kế cửa sổ

    • Cửa sổ nổi, popup và modal popup. Độc lập với backend ImGui
    • MainWindow thông qua tích hợp GLFW. ImRAD sinh các lời gọi GLFW để đồng bộ cửa sổ ImGui với cửa sổ OS (thanh tiêu đề, cờ cho phép đổi kích thước, tự động đổi kích thước, v.v.)
    • Activity. Cửa sổ không viền lấp đầy toàn bộ vùng viewport. Chủ yếu dùng cho ứng dụng Android
    • Bao gồm mẫu GLFW sinh ra main.cpp thông thường
    • Bao gồm mẫu Android sinh ra MainActivity.java + manifest + main.cpp
  • Hỗ trợ nhiều widget

    • Các widget cơ bản như Text, Checkbox, Combo, Button, Slider, ColorEdit
    • Các widget container như Child, Table, CollapsingHeader, TreeNode, TabBar
    • Các widget đặc biệt như Splitter
    • Chỉnh sửa MenuBar và menu ngữ cảnh
    • CustomWidget cho mã người dùng (placeholder)
  • Tạo layout bằng SameLine/Spacing/NextColumn

    • Điều này đảm bảo widget luôn tuân thủ nhất quán khoảng cách giữa các mục và phần đệm khung
    • Quan hệ cha-con rõ ràng giữa các widget và thứ tự của widget con là quan trọng
  • Hỗ trợ box layout

    • Cơ chế layout mạnh mẽ và dễ dùng được xây dựng trên các tính năng của ImGui
    • Có thể kéo giãn các widget có thể thay đổi kích thước theo chiều ngang hoặc dọc
    • Có thể chèn spacer để căn chỉnh
    • Có thể tạo layout ngang bằng helper layout dạng bảng
  • Hỗ trợ ràng buộc thuộc tính

    • Biến lớp có thể được quản lý bằng trình wizard lớp đơn giản hoặc hộp thoại binding
    • UI được tạo thông qua ràng buộc thuộc tính vừa động vừa có thể thiết kế cùng lúc
  • Sinh trình xử lý sự kiện và mã hỗ trợ khác

    • Ví dụ, hộp thoại modal sẽ sinh hàm thành viên OpenPopup và callback lambda được gọi khi hộp thoại đóng lại
    • Trình xử lý sự kiện tách biệt mã người dùng với phần được sinh ra để trình thiết kế tiếp tục hoạt động
  • Mã được sinh ra được phân tách bằng marker comment và người dùng có thể tự do thêm mã bổ sung

    • Có thể dùng để gọi Draw cho popup phụ thuộc hoặc tính toán biến
    • Có thể dùng CustomWidget để gọi callback mã người dùng
  • Kiểu dáng cửa sổ đích có thể cấu hình hoàn toàn

    • Ngoài các kiểu mặc định do ImGui cung cấp, người dùng có thể định nghĩa kiểu mới và lưu dưới dạng tệp INI trong thư mục style
    • ImRAD tuân theo thiết lập kiểu khi thiết kế UI
    • Các kiểu đã lưu có thể được nạp trong ứng dụng bằng một hàm imrad.h đơn giản
  • Mã được sinh ra có thể dùng ngay trong dự án và chỉ cần thư viện ImGui cùng một tệp header (imrad.h)

    • Một số tính năng như MainWindow hoặc widget Image cần phụ thuộc GLFW. Có thể bật bằng cách biên dịch với IMRAD_WITH_GLFW
    • Hiện tại widget Image cũng cần thư viện stb. Có thể biên dịch với IMRAD_WITH_STB hoặc cung cấp LoadTextureFromFile()
    • Hỗ trợ tùy chọn cho thư viện phổ biến fmt có thể được bật bằng cách định nghĩa IMRAD_WITH_FMT. Điều này cho phép dùng cờ định dạng cho mọi thuộc tính chuỗi
  • ImRAD theo dõi các thay đổi của tệp đang mở để có thể thiết kế và chỉnh sửa tệp trong IDE

    • Tính năng tự động lưu có thể hữu ích

Giấy phép

  • Mã nguồn ImRAD được cấp phép theo GPL
  • Mã được công cụ sinh ra không thuộc GPL và có thể được đưa vào dự án mã nguồn mở hoặc thương mại. Người dùng tự quyết định giấy phép
  • imrad.h cũng không thuộc giấy phép GPL

Tải xuống

Phiên bản mới nhất có thể được lấy bằng cách clone kho lưu trữ và build bằng CMake. Cần lấy cả submodule trong thư mục 3rdparty. Các phiên bản cũ hơn một chút có thể tải từ Releases

Tóm tắt của GN⁺

  • ImRAD là một trình dựng GUI mạnh mẽ cho thư viện ImGui, hỗ trợ nhiều loại cửa sổ và widget
  • Có thể thiết kế UI động và linh hoạt nhờ tính năng ràng buộc thuộc tính và sinh trình xử lý sự kiện
  • Mã được sinh ra có thể dùng ngay trong dự án và hỗ trợ nhiều phụ thuộc khác nhau
  • ImRAD đang được phát triển tích cực và cho phép người dùng tự do định nghĩa, lưu kiểu dáng
  • Các dự án khác có tính năng tương tự gồm Qt Designer và Dear ImGui

1 bình luận

 
GN⁺ 2024-08-17
Ý kiến trên Hacker News
  • Một trong những phần đáng kinh ngạc nhất của dự án này là đã triển khai một parser viết tay xử lý một tập con của C++ chỉ trong một file header duy nhất
  • Vì người tạo ra dear-imgui nói rằng nó được đặt tên là "dear", nên có lẽ phải gọi nó là "thư viện Dear"
    • IMGUI có nghĩa là GUI chế độ tức thời, và người tạo ra nó nói rằng đã lấy cảm hứng từ một IMGUI khác là "simgui"
  • Gợi cảm giác hoài niệm về Visual Basic, nhưng cái này giống như lớp kem phủ trên chiếc bánh của imgui
  • Sẽ rất hay nếu có một ứng dụng wasm html5 để nhanh chóng tạo GUI trong trình duyệt rồi sao chép và dán kết quả vào trình soạn thảo
    • Công cụ này có thể sinh và phân tích cú pháp mã C++ để dùng trực tiếp trong ứng dụng
  • Tôi đã làm việc với các ứng dụng ImGui C++ trong vài năm qua, và công cụ này có thể đã giúp tiết kiệm rất nhiều thời gian
  • Khi dùng binding pyimgui, tôi tự hỏi liệu mã C++ được sinh ra có thể dùng được từ Python hay không
  • Tôi thắc mắc vì sao một GUI builder lại không được triển khai ngay trong chính ImGui
  • Khi làm dự án với ImGui, tôi đã từng nghĩ sẽ thật tuyệt nếu có một công cụ như thế này, nhất định sẽ thử
  • Steam là một hệ thống đa nền tảng phổ biến, nhưng tôi tự hỏi liệu nó có thể dùng cho các ứng dụng phi game hay ứng dụng doanh nghiệp không
  • Có vẻ có hơi quá nhiều lệnh sudo, nhưng nhìn chung trông rất tuyệt