ImRAD, ตัวสร้าง GUI สำหรับไลบรารี ImGui
(github.com/tpecholt)ImRAD
ImRAD เป็นตัวสร้าง GUI สำหรับไลบรารี ImGui สามารถสร้างและพาร์สโค้ด C++ เพื่อนำไปใช้ได้โดยตรงในแอปพลิเคชัน ImRAD สามารถทำงานได้บน Windows, Linux และ MacOS
คุณสมบัติ
ImRAD ยังอยู่ระหว่างการพัฒนาอย่างต่อเนื่อง และมีคุณสมบัติหลักดังนี้:
-
รองรับการออกแบบหน้าต่างหลากหลายรูปแบบ
- หน้าต่างลอย, ป๊อปอัป และโมดัลป๊อปอัป โดยไม่ขึ้นกับ ImGui backend
- MainWindow ผ่านการผสานรวมกับ GLFW โดย ImRAD จะสร้างคำสั่งเรียก GLFW เพื่อซิงก์หน้าต่าง ImGui กับหน้าต่างของระบบปฏิบัติการ (แถบชื่อเรื่อง, แฟล็กปรับขนาดได้, ปรับขนาดอัตโนมัติ เป็นต้น)
- Activity หน้าต่างไร้กรอบที่เติมเต็มพื้นที่ viewport ทั้งหมด ใช้กับแอป Android เป็นหลัก
- มีเทมเพลต GLFW ที่สร้าง
main.cppทั่วไป - มีเทมเพลต Android ที่สร้าง
MainActivity.java+manifest+main.cppทั่วไป
-
รองรับวิดเจ็ตหลากหลาย
- วิดเจ็ตพื้นฐาน เช่น
Text,Checkbox,Combo,Button,Slider,ColorEdit - วิดเจ็ตคอนเทนเนอร์ เช่น
Child,Table,CollapsingHeader,TreeNode,TabBar - วิดเจ็ตเฉพาะทางอย่าง
Splitter - การแก้ไข
MenuBarและเมนูตามบริบท CustomWidgetสำหรับโค้ดของผู้ใช้ (placeholder)
- วิดเจ็ตพื้นฐาน เช่น
-
สร้างเลย์เอาต์ด้วย
SameLine/Spacing/NextColumn- ช่วยให้วิดเจ็ตรักษาระยะห่างระหว่างรายการและ frame padding ได้อย่างสม่ำเสมอ
- ความสัมพันธ์แบบพาเรนต์-ชิลด์ระหว่างวิดเจ็ตและลำดับของชิลด์มีความสำคัญ
-
รองรับ box layout
- เป็นกลไกเลย์เอาต์ที่ทรงพลังและใช้งานง่าย สร้างอยู่บนความสามารถของ ImGui
- สามารถ stretch วิดเจ็ตที่ปรับขนาดได้ในแนวนอนหรือแนวตั้ง
- สามารถแทรก spacer เพื่อใช้จัดแนวได้
- สามารถสร้างเลย์เอาต์แนวนอนด้วย table layout helper
-
รองรับการ bind properties
- ตัวแปรของคลาสสามารถจัดการได้ผ่าน class wizard แบบง่ายหรือกล่องโต้ตอบ binding
- UI ที่สร้างด้วยการ bind properties สามารถเป็นแบบไดนามิกและยังออกแบบได้พร้อมกัน
-
สร้าง event handler และโค้ดสนับสนุนอื่น ๆ
- ตัวอย่างเช่น modal dialog จะสร้างเมมเบอร์ฟังก์ชัน
OpenPopupและ lambda callback ที่จะถูกเรียกเมื่อ dialog ถูกปิด - event handler แยกโค้ดของผู้ใช้ออกจากส่วนที่สร้างอัตโนมัติ เพื่อให้ตัวออกแบบยังทำงานต่อได้
- ตัวอย่างเช่น modal dialog จะสร้างเมมเบอร์ฟังก์ชัน
-
โค้ดที่สร้างขึ้นถูกแบ่งด้วย comment marker และผู้ใช้สามารถเพิ่มโค้ดเพิ่มเติมได้อย่างอิสระ
- ใช้สำหรับเรียก Draw ของ dependent popup หรือคำนวณตัวแปรได้
- สามารถใช้
CustomWidgetที่เรียก user code callback ได้
-
สไตล์หน้าต่างเป้าหมายสามารถกำหนดค่าได้ทั้งหมด
- นอกจากสไตล์พื้นฐานที่ ImGui มีให้แล้ว ผู้ใช้ยังสามารถกำหนดสไตล์ใหม่และบันทึกเป็นไฟล์ INI ในโฟลเดอร์
styleได้ - ImRAD จะอ้างอิงการตั้งค่าสไตล์ขณะออกแบบ UI
- สไตล์ที่บันทึกไว้สามารถโหลดในแอปพลิเคชันได้ด้วยฟังก์ชัน
imrad.hแบบง่าย
- นอกจากสไตล์พื้นฐานที่ ImGui มีให้แล้ว ผู้ใช้ยังสามารถกำหนดสไตล์ใหม่และบันทึกเป็นไฟล์ INI ในโฟลเดอร์
-
โค้ดที่สร้างขึ้นสามารถนำไปใช้ในโปรเจ็กต์ได้ทันที และต้องการเพียงไลบรารี ImGui กับไฟล์เฮดเดอร์เดียว (
imrad.h)- บางฟีเจอร์ เช่น MainWindow หรือวิดเจ็ต Image ต้องมี dependency ของ GLFW และสามารถเปิดใช้งานได้โดยคอมไพล์ด้วย
IMRAD_WITH_GLFW - ปัจจุบันวิดเจ็ต Image ยังต้องใช้ไลบรารี stb ด้วย สามารถเปิดใช้งานได้โดยคอมไพล์ด้วย
IMRAD_WITH_STBหรือจัดเตรียมLoadTextureFromFile() - รองรับไลบรารี
fmtยอดนิยมแบบเลือกใช้ โดยเปิดใช้งานด้วยการกำหนดIMRAD_WITH_FMTซึ่งจะทำให้สามารถใช้แฟล็ก format กับ string properties ทั้งหมดได้
- บางฟีเจอร์ เช่น MainWindow หรือวิดเจ็ต Image ต้องมี dependency ของ GLFW และสามารถเปิดใช้งานได้โดยคอมไพล์ด้วย
-
ImRAD ติดตามการเปลี่ยนแปลงของไฟล์ที่เปิดอยู่ ทำให้สามารถออกแบบและแก้ไขไฟล์จาก IDE ได้
- ฟีเจอร์บันทึกอัตโนมัติอาจมีประโยชน์
ใบอนุญาต
- ซอร์สโค้ดของ ImRAD อยู่ภายใต้ใบอนุญาต GPL
- โค้ดที่เครื่องมือสร้างขึ้นไม่อยู่ภายใต้ GPL และสามารถรวมในโปรเจ็กต์โอเพนซอร์สหรือเชิงพาณิชย์ได้ โดยผู้ใช้เป็นผู้กำหนดใบอนุญาต
imrad.hก็ไม่อยู่ภายใต้ใบอนุญาต GPL เช่นกัน
ดาวน์โหลด
เวอร์ชันล่าสุดสามารถได้มาด้วยการโคลนรีโพซิทอรีและบิลด์ด้วย CMake โดยต้องดึง submodule ในไดเรกทอรี 3rdparty มาด้วย เวอร์ชันที่ค่อนข้างเก่ากว่าสามารถดาวน์โหลดได้จาก Releases
สรุปโดย GN⁺
- ImRAD เป็นตัวสร้าง GUI ที่ทรงพลังสำหรับไลบรารี ImGui และรองรับหน้าต่างกับวิดเจ็ตหลากหลาย
- สามารถออกแบบ UI ที่ไดนามิกและยืดหยุ่นได้ด้วยความสามารถในการ bind properties และสร้าง event handler
- โค้ดที่สร้างขึ้นสามารถนำไปใช้ในโปรเจ็กต์ได้ทันที และรองรับ dependency ที่หลากหลาย
- ImRAD ยังอยู่ระหว่างการพัฒนาอย่างต่อเนื่อง และผู้ใช้สามารถกำหนดและบันทึกสไตล์ได้อย่างอิสระ
- โปรเจ็กต์อื่นที่มีความสามารถคล้ายกัน ได้แก่ Qt Designer และ Dear ImGui
1 ความคิดเห็น
ความเห็นบน Hacker News