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 เปิดหรือปิดฟีเจอร์นั้น และคอนโทรลภายในใช้กำหนดค่าให้กับมัน