Пример #1
0
        public static void Table <T>(this IEnumerable <T> items, string id, ref T selectedItem)
        {
            var props = typeof(T).GetProperties();

            ImGui.BeginChild("##scrolling");

            ImGui.Columns(props.Length, "##columns", true);

            PropertyInfo idProp = null;

            foreach (var prop in props)
            {
                if (prop.Name == id)
                {
                    idProp = prop;
                }
                ImGui.Text(prop.Name);
                ImGui.NextColumn();
            }

            float itemHeight = ImGuiNative.igGetTextLineHeightWithSpacing();
            int   displayStart = 0, displayEnd = items.Count();

            ImGui.CalcListClipping(displayEnd, itemHeight, ref displayStart, ref displayEnd);
            var visibleitems = items.Skip(displayStart).Take(displayEnd - displayStart).ToArray();

            foreach (var prop in props)
            {
                ImGuiNative.igSetCursorPosY(ImGuiNative.igGetCursorPosY() + (displayStart * itemHeight));

                foreach (var i in visibleitems)
                {
                    if (ImGui.Selectable(prop.GetValue(i).ToString() + "##" + idProp?.GetValue(i).ToString(),
                                         i.Equals(selectedItem)))
                    {
                        selectedItem = i;
                    }
                }
                ImGui.NextColumn();
            }

            ImGui.Columns(1, "##columns", true);

            ImGui.EndChild();
        }
Пример #2
0
 public void Begin(int count, float items_height = -1.0f)
 {
     StartPosY   = ImGuiNative.igGetCursorPosY();
     ItemsHeight = items_height;
     ItemsCount  = count;
     StepNo      = 0;
     DisplayEnd  = DisplayStart = -1;
     if (ItemsHeight > 0.0f)
     {
         ImGui.CalcListClipping(ItemsCount, ItemsHeight, ref DisplayStart, ref DisplayEnd);     // calculate how many to clip/display
         if (DisplayStart > 0)
         {
             //SetCursorPosYAndSetupDummyPrevLine(StartPosY + DisplayStart * ItemsHeight, ItemsHeight); // advance cursor
             ImGuiNative.igSetCursorPosY(StartPosY + DisplayStart * ItemsHeight);
         }
         StepNo = 2;
     }
 }