13.1.13.4.1. คอนเทนเนอร์#
คอนเทนเนอร์ไม่ได้เก็บค่าเป็นของตัวเอง -- แต่ทำหน้าที่จัดระเบียบคอนโทรลอื่น ๆ แต่ละอันจะกินความกว้างเต็มของฟอร์ม และคอนโทรลที่อยู่ภายในจะถูกสร้างเป็นฟอร์มของตัวเอง มีอยู่สองแบบ: group วาดกล่องที่มีป้ายกำกับ และ tabs วาดแถบแท็บ
ตัวควบคุมทั้งหมดยังรับคีย์ทั่วไป ( name , label , tooltip , enabled ) ด้วย ดูที่ ภาพรวม
13.1.13.4.1.1. group#
กล่องที่มีป้ายกำกับล้อมรอบชุดของคอนโทรล สามารถกำหนดให้เป็น checkable ได้ ซึ่งจะเปลี่ยนหัวข้อให้กลายเป็นสวิตช์สำหรับทุกอย่างที่อยู่ภายใน
{
"type": "group",
"title": "Wi-Fi",
"checkable": true,
"name": "wifi_enabled",
"value": true,
"controls": [
{ "type": "lineedit", "name": "ssid", "label": "SSID" },
{ "type": "lineedit", "name": "password", "label": "Password", "password": true }
]
}
อาร์กิวเมนต์:
title (string) -- หัวข้อที่แสดงบนกล่อง
checkable (boolean, ค่าเริ่มต้น
false) -- เมื่อเป็นtrueหัวข้อจะมีเช็คบ็อกซ์ที่เปิดหรือปิดการใช้งานคอนโทรลทุกตัวภายในกล่อง และสถานะเปิด/ปิดของมันเองจะถูกบันทึกไว้value (boolean, ค่าเริ่มต้น
true) -- สถานะเริ่มต้นของเช็คบ็อกซ์หัวข้อนั้น มีความหมายเฉพาะเมื่อ checkable เป็นtrueเท่านั้นcontrols (array) -- คอนโทรลที่แสดงภายในกล่อง
บันทึก: ค่า boolean (เช็คบ็อกซ์หัวข้อ) เมื่อ checkable เป็น true ส่วน group ธรรมดาจะไม่บันทึกอะไรเป็นของตัวเอง -- มีเพียงคอนโทรลภายในเท่านั้นที่บันทึกค่าของมัน
13.1.13.4.1.2. tabs#
แถบแท็บ แต่ละแท็บเป็นหน้าที่มีรายการคอนโทรลของตัวเอง ดังนั้นฟอร์มที่ยาวจึงสามารถแบ่งออกเป็น Camera, Network, System และอื่น ๆ ได้
{
"type": "tabs",
"tab_position": "north",
"tabs": [
{
"title": "Camera",
"tooltip": "Sensor settings",
"controls": [
{ "type": "slider", "name": "gain", "label": "Gain" }
]
},
{
"title": "Network",
"controls": [
{ "type": "lineedit", "name": "hostname", "label": "Hostname" }
]
}
]
}
อาร์กิวเมนต์:
tab_position (string, ค่าเริ่มต้น
"north") -- ขอบด้านใดที่แถบแท็บจะอยู่:"north","south","west"หรือ"east"tabs (array) -- หน้าแท็บต่าง ๆ ตามลำดับ แต่ละหน้าเป็นออบเจกต์ที่มี:
title (string) -- ป้ายกำกับของแท็บ
tooltip (string) -- ข้อความที่แสดงเมื่อชี้เมาส์ที่แท็บ
controls (array) -- คอนโทรลที่แสดงบนหน้านั้น
บันทึก: ไม่มีอะไรเป็นของตัวเอง คอนโทรลบนแต่ละหน้าจะบันทึกค่าของมันเอง
13.1.13.4.1.3. การซ้อน#
คอนโทรลใด ๆ สามารถวางไว้ภายในคอนเทนเนอร์ใด ๆ ได้ ในระดับความลึกใด ๆ ก็ตาม group สามารถบรรจุ tabs ได้ หน้าแท็บสามารถบรรจุกล่อง group ได้ และ group สามารถซ้อนภายใน group ได้ ทุกอาร์เรย์ controls -- ทั้งระดับบนสุด ของ group และของหน้าแท็บ -- รับออบเจกต์คอนโทรลแบบเดียวกัน ดังนั้นกฎในหน้าเหล่านี้จึงใช้ได้เหมือนกันในทุกระดับ
group แบบ checkable ที่ซ้อนอยู่ภายในแท็บเป็นรูปแบบที่พบได้บ่อย: แท็บบรรจุฟีเจอร์หนึ่ง เช็คบ็อกซ์ของ group เปิดหรือปิดฟีเจอร์นั้น และคอนโทรลภายในใช้กำหนดค่าให้กับมัน