mirror of https://github.com/ocornut/imgui
Demo: Added more complete Combo demo. (#1658)
This commit is contained in:
parent
62e94717eb
commit
166411287f
1
TODO.txt
1
TODO.txt
|
@ -237,6 +237,7 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i
|
||||||
- font: fix AddRemapChar() to work before font has been built.
|
- font: fix AddRemapChar() to work before font has been built.
|
||||||
- font: (api breaking) removed "TTF" from symbol names. also because it now supports OTF.
|
- font: (api breaking) removed "TTF" from symbol names. also because it now supports OTF.
|
||||||
|
|
||||||
|
- nav: SetItemDefaultFocus() level of priority, so widget like Selectable when inside a popup could claim a low-priority default focus on the first selected iem
|
||||||
- nav: allow input system to be be more tolerant of io.DeltaTime=0.0f
|
- nav: allow input system to be be more tolerant of io.DeltaTime=0.0f
|
||||||
- nav: ESC on a flattened child
|
- nav: ESC on a flattened child
|
||||||
- nav: Left within a tree node block as a fallback (ImGuiTreeNodeFlags_NavLeftJumpsBackHere by default?)
|
- nav: Left within a tree node block as a fallback (ImGuiTreeNodeFlags_NavLeftJumpsBackHere by default?)
|
||||||
|
|
109
imgui_demo.cpp
109
imgui_demo.cpp
|
@ -321,37 +321,16 @@ void ImGui::ShowDemoWindow(bool* p_open)
|
||||||
ImGui::EndTooltip();
|
ImGui::EndTooltip();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Testing ImGuiOnceUponAFrame helper.
|
|
||||||
//static ImGuiOnceUponAFrame once;
|
|
||||||
//for (int i = 0; i < 5; i++)
|
|
||||||
// if (once)
|
|
||||||
// ImGui::Text("This will be displayed only once.");
|
|
||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
ImGui::LabelText("label", "Value");
|
ImGui::LabelText("label", "Value");
|
||||||
|
|
||||||
{
|
{
|
||||||
// Simplified one-liner Combo() API, using values packed in a single constant string
|
// Using the _simplified_ one-liner Combo() api here
|
||||||
static int current_item_1 = 1;
|
const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO" };
|
||||||
ImGui::Combo("combo", ¤t_item_1, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0");
|
static int item_current = 0;
|
||||||
//ImGui::Combo("combo w/ array of char*", ¤t_item_2_idx, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that.
|
ImGui::Combo("combo", &item_current, items, IM_ARRAYSIZE(items));
|
||||||
|
ImGui::SameLine(); ShowHelpMarker("Refer to the \"Combo\" section below for an explanation of the full BeginCombo/EndCombo API, and demonstration of various flags.\n");
|
||||||
// General BeginCombo() API, you have full control over your selection data and display type
|
|
||||||
const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO", "PPPP", "QQQQQQQQQQ", "RRR", "SSSS" };
|
|
||||||
static const char* current_item_2 = NULL;
|
|
||||||
if (ImGui::BeginCombo("combo 2", current_item_2)) // The second parameter is the label previewed before opening the combo.
|
|
||||||
{
|
|
||||||
for (int n = 0; n < IM_ARRAYSIZE(items); n++)
|
|
||||||
{
|
|
||||||
bool is_selected = (current_item_2 == items[n]); // You can store your selection however you want, outside or inside your objects
|
|
||||||
if (ImGui::Selectable(items[n], is_selected))
|
|
||||||
current_item_2 = items[n];
|
|
||||||
if (is_selected)
|
|
||||||
ImGui::SetItemDefaultFocus(); // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch)
|
|
||||||
}
|
|
||||||
ImGui::EndCombo();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -394,25 +373,36 @@ void ImGui::ShowDemoWindow(bool* p_open)
|
||||||
ImGui::SliderAngle("slider angle", &angle);
|
ImGui::SliderAngle("slider angle", &angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
static float col1[3] = { 1.0f,0.0f,0.2f };
|
{
|
||||||
static float col2[4] = { 0.4f,0.7f,0.0f,0.5f };
|
static float col1[3] = { 1.0f,0.0f,0.2f };
|
||||||
ImGui::ColorEdit3("color 1", col1);
|
static float col2[4] = { 0.4f,0.7f,0.0f,0.5f };
|
||||||
ImGui::SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n");
|
ImGui::ColorEdit3("color 1", col1);
|
||||||
|
ImGui::SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n");
|
||||||
|
|
||||||
ImGui::ColorEdit4("color 2", col2);
|
ImGui::ColorEdit4("color 2", col2);
|
||||||
|
}
|
||||||
|
|
||||||
const char* listbox_items[] = { "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" };
|
{
|
||||||
static int listbox_item_current = 1;
|
// List box
|
||||||
ImGui::ListBox("listbox\n(single select)", &listbox_item_current, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
|
const char* listbox_items[] = { "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" };
|
||||||
|
static int listbox_item_current = 1;
|
||||||
|
ImGui::ListBox("listbox\n(single select)", &listbox_item_current, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
|
||||||
|
|
||||||
//static int listbox_item_current2 = 2;
|
//static int listbox_item_current2 = 2;
|
||||||
//ImGui::PushItemWidth(-1);
|
//ImGui::PushItemWidth(-1);
|
||||||
//ImGui::ListBox("##listbox2", &listbox_item_current2, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
|
//ImGui::ListBox("##listbox2", &listbox_item_current2, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
|
||||||
//ImGui::PopItemWidth();
|
//ImGui::PopItemWidth();
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Testing ImGuiOnceUponAFrame helper.
|
||||||
|
//static ImGuiOnceUponAFrame once;
|
||||||
|
//for (int i = 0; i < 5; i++)
|
||||||
|
// if (once)
|
||||||
|
// ImGui::Text("This will be displayed only once.");
|
||||||
|
|
||||||
if (ImGui::TreeNode("Trees"))
|
if (ImGui::TreeNode("Trees"))
|
||||||
{
|
{
|
||||||
if (ImGui::TreeNode("Basic trees"))
|
if (ImGui::TreeNode("Basic trees"))
|
||||||
|
@ -617,6 +607,49 @@ void ImGui::ShowDemoWindow(bool* p_open)
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ImGui::TreeNode("Combo"))
|
||||||
|
{
|
||||||
|
// Expose flags as checkbox for the demo
|
||||||
|
static ImGuiComboFlags flags = 0;
|
||||||
|
ImGui::CheckboxFlags("ImGuiComboFlags_PopupAlignLeft", (unsigned int*)&flags, ImGuiComboFlags_PopupAlignLeft);
|
||||||
|
if (ImGui::CheckboxFlags("ImGuiComboFlags_NoArrowButton", (unsigned int*)&flags, ImGuiComboFlags_NoArrowButton))
|
||||||
|
flags &= ~ImGuiComboFlags_NoPreview; // Clear the other flag, as we cannot combine both
|
||||||
|
if (ImGui::CheckboxFlags("ImGuiComboFlags_NoPreview", (unsigned int*)&flags, ImGuiComboFlags_NoPreview))
|
||||||
|
flags &= ~ImGuiComboFlags_NoArrowButton; // Clear the other flag, as we cannot combine both
|
||||||
|
|
||||||
|
// General BeginCombo() API, you have full control over your selection data and display type.
|
||||||
|
// (your selection data could be an index, a pointer to the object, an id for the object, a flag stored in the object itself, etc.)
|
||||||
|
const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO" };
|
||||||
|
static const char* item_current = items[0]; // Here our selection is a single pointer stored outside the object.
|
||||||
|
if (ImGui::BeginCombo("combo 1", item_current, flags)) // The second parameter is the label previewed before opening the combo.
|
||||||
|
{
|
||||||
|
for (int n = 0; n < IM_ARRAYSIZE(items); n++)
|
||||||
|
{
|
||||||
|
bool is_selected = (item_current == items[n]);
|
||||||
|
if (ImGui::Selectable(items[n], is_selected))
|
||||||
|
item_current = items[n];
|
||||||
|
if (is_selected)
|
||||||
|
ImGui::SetItemDefaultFocus(); // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch)
|
||||||
|
}
|
||||||
|
ImGui::EndCombo();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Simplified one-liner Combo() API, using values packed in a single constant string
|
||||||
|
static int item_current_2 = 0;
|
||||||
|
ImGui::Combo("combo 2 (one-liner)", &item_current_2, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0");
|
||||||
|
|
||||||
|
// Simplified one-liner Combo() using an array of const char*
|
||||||
|
static int item_current_3 = -1; // If the selection isn't within 0..count, Combo won't display a preview
|
||||||
|
ImGui::Combo("combo 3 (array)", &item_current_3, items, IM_ARRAYSIZE(items));
|
||||||
|
|
||||||
|
// Simplified one-liner Combo() using an accessor function
|
||||||
|
struct FuncHolder { static bool ItemGetter(void* data, int idx, const char** out_str) { *out_str = ((const char**)data)[idx]; return true; } };
|
||||||
|
static int item_current_4 = 0;
|
||||||
|
ImGui::Combo("combo 4 (function)", &item_current_4, &FuncHolder::ItemGetter, items, IM_ARRAYSIZE(items));
|
||||||
|
|
||||||
|
ImGui::TreePop();
|
||||||
|
}
|
||||||
|
|
||||||
if (ImGui::TreeNode("Selectables"))
|
if (ImGui::TreeNode("Selectables"))
|
||||||
{
|
{
|
||||||
// Selectable() has 2 overloads:
|
// Selectable() has 2 overloads:
|
||||||
|
|
Loading…
Reference in New Issue