|
@@ -161,22 +161,35 @@ Interactive widgets (such as calls to Button buttons) need a unique ID.
|
|
|
Unique ID are used internally to track active widgets and occasionally associate state to widgets.
|
|
|
Unique ID are implicitly built from the hash of multiple elements that identify the "path" to the UI element.
|
|
|
|
|
|
-- Unique ID are often derived from a string label:
|
|
|
+- Unique ID are often derived from a string label and at minimum scoped within their host window:
|
|
|
```c
|
|
|
-Button("OK"); // Label = "OK", ID = hash of (..., "OK")
|
|
|
-Button("Cancel"); // Label = "Cancel", ID = hash of (..., "Cancel")
|
|
|
+Begin("MyWindow");
|
|
|
+Button("OK"); // Label = "OK", ID = hash of ("MyWindow" "OK")
|
|
|
+Button("Cancel"); // Label = "Cancel", ID = hash of ("MyWindow", "Cancel")
|
|
|
+End();
|
|
|
```
|
|
|
-- ID are uniquely scoped within windows, tree nodes, etc. which all pushes to the ID stack. Having
|
|
|
-two buttons labeled "OK" in different windows or different tree locations is fine.
|
|
|
-We used "..." above to signify whatever was already pushed to the ID stack previously:
|
|
|
+- Other elements such as tree nodes, etc. also pushes to the ID stack:
|
|
|
```c
|
|
|
Begin("MyWindow");
|
|
|
-Button("OK"); // Label = "OK", ID = hash of ("MyWindow", "OK")
|
|
|
+if (TreeNode("MyTreeNode"))
|
|
|
+{
|
|
|
+ Button("OK"); // Label = "OK", ID = hash of ("MyWindow", "MyTreeNode", "OK")
|
|
|
+ TreePop();
|
|
|
+}
|
|
|
+End();
|
|
|
+```
|
|
|
+- Two items labeled "OK" in different windows or different tree locations won't collide:
|
|
|
+```
|
|
|
+Begin("MyFirstWindow");
|
|
|
+Button("OK"); // Label = "OK", ID = hash of ("MyFirstWindow", "OK")
|
|
|
End();
|
|
|
Begin("MyOtherWindow");
|
|
|
Button("OK"); // Label = "OK", ID = hash of ("MyOtherWindow", "OK")
|
|
|
End();
|
|
|
```
|
|
|
+
|
|
|
+We used "..." above to signify whatever was already pushed to the ID stack previously:
|
|
|
+
|
|
|
- If you have a same ID twice in the same location, you'll have a conflict:
|
|
|
```c
|
|
|
Button("OK");
|