dlxjj/imradv3
0262
1#pragma once2#include "node_standard.h"3 4struct Table : Widget5{6 struct ColumnData7 {8 direct_val<std::string> label = "";9 bindable<bool> visible;10 direct_val<ImGuiTableColumnFlags_> sizingPolicy = 0;11 direct_val<float> width = 0;12 direct_val<ImGuiTableColumnFlags_> flags;13 14 ColumnData();15 ColumnData(const std::string& l, ImGuiTableColumnFlags_ sizingPolicy, float w = 0);16 const ColumnData& Defaults() const { static ColumnData cd; return cd; }17 auto Properties()->std::vector<Prop>;18 bool PropertyUI(int i, UIContext& ctx);19 std::string SizingPolicyString();20 };21 22 direct_val<ImGuiTableFlags_> flags = ImGuiTableFlags_Borders;23 std::vector<ColumnData> columnData;24 direct_val<bool> header = true;25 bindable<bool> rowFilter;26 bindable<dimension_t> rowHeight = 0;27 direct_val<int> scrollFreeze_x = 0;28 direct_val<int> scrollFreeze_y = 0;29 direct_val<bool> scrollWhenDragging = false;30 direct_val<pzdimension2_t> style_cellPadding;31 bindable<color_t> style_headerBg;32 bindable<color_t> style_rowBg;33 bindable<color_t> style_rowBgAlt;34 bindable<color_t> style_childBg;35 event<> onBeginRow;36 event<> onEndRow;37 event<> onSetup;38 39 Table(UIContext&);40 auto Clone(UIContext& ctx)->std::unique_ptr<Widget>;41 int Behavior() { return Widget::Behavior() | SnapInterior | HasSizeX | HasSizeY; }42 ImDrawList* DoDraw(UIContext& ctx);43 auto Properties() ->std::vector<Prop>;44 bool PropertyUI(int i, UIContext& ctx);45 auto Events()->std::vector<Prop>;46 bool EventUI(int i, UIContext& ctx);47 void DoExport(std::ostream& os, UIContext& ctx);48 void DoImport(const cpp::stmt_iterator& sit, UIContext& ctx);49 const char* GetIcon() const { return ICON_FA_TABLE_CELLS_LARGE; }50 const Table& Defaults() { static Table var(UIContext::Defaults()); return var; }51 int ColumnCount(UIContext& ctx) { return (int)columnData.size(); }52};53 54struct Child : Widget55{56 direct_val<ImGuiChildFlags_> flags = ImGuiChildFlags_AlwaysUseWindowPadding | ImGuiChildFlags_NavFlattened;57 direct_val<ImGuiWindowFlags_> wflags = ImGuiWindowFlags_NoSavedSettings;58 bindable<int> columnCount = 1;59 direct_val<bool> columnBorder = true;60 direct_val<bool> scrollWhenDragging = false;61 direct_val<pzdimension2_t> style_padding;62 direct_val<pzdimension2_t> style_spacing;63 direct_val<bool> style_outerPadding = true;64 direct_val<pzdimension_t> style_rounding;65 direct_val<pzdimension_t> style_borderSize;66 bindable<color_t> style_bg;67 68 Child(UIContext& ctx);69 auto Clone(UIContext& ctx)->std::unique_ptr<Widget>;70 int Behavior();71 ImDrawList* DoDraw(UIContext& ctx);72 auto Properties() ->std::vector<Prop>;73 bool PropertyUI(int i, UIContext& ctx);74 void DoExport(std::ostream& os, UIContext& ctx);75 void DoImport(const cpp::stmt_iterator& sit, UIContext& ctx);76 const char* GetIcon() const { return ICON_FA_SQUARE_FULL; }77 void CalcSizeEx(ImVec2 p1, UIContext& ctx);78 const Child& Defaults() { static Child var(UIContext::Defaults()); return var; }79 int ColumnCount(UIContext& ctx) { return columnCount.eval(ctx); }80};81 82struct CollapsingHeader : Widget83{84 bindable<std::string> label = "label";85 direct_val<ImGuiTreeNodeFlags_> flags;86 bindable<bool> open;87 bindable<color_t> style_header;88 bindable<color_t> style_hovered;89 bindable<color_t> style_active;90 91 CollapsingHeader(UIContext& ctx);92 auto Clone(UIContext& ctx)->std::unique_ptr<Widget>;93 int Behavior() { return SnapSides | SnapInterior; }94 ImDrawList* DoDraw(UIContext& ctx);95 auto Properties()->std::vector<Prop>;96 bool PropertyUI(int i, UIContext& ctx);97 void DoExport(std::ostream& os, UIContext& ctx);98 void DoImport(const cpp::stmt_iterator& sit, UIContext& ctx);99 void CalcSizeEx(ImVec2 p1, UIContext& ctx);100 const char* GetIcon() const { return ICON_FA_ARROW_DOWN_WIDE_SHORT; }101 const CollapsingHeader& Defaults() { static CollapsingHeader var(UIContext::Defaults()); return var; }102};103 104struct TabBar : Widget105{106 direct_val<ImGuiTabBarFlags_> flags;107 field_ref<int> activeTab;108 bindable<color_t> style_tab;109 bindable<color_t> style_tabDimmed;110 bindable<color_t> style_hovered;111 bindable<color_t> style_selected;112 bindable<color_t> style_dimmedSelected;113 bindable<color_t> style_overline;114 direct_val<bool> style_regularWidth = false;115 116 TabBar(UIContext& ctx);117 auto Clone(UIContext& ctx)->std::unique_ptr<Widget>;118 int Behavior() { return NoOverlayPos | SnapSides; }119 ImDrawList* DoDraw(UIContext& ctx);120 auto Properties()->std::vector<Prop>;121 bool PropertyUI(int i, UIContext& ctx);122 void DoExport(std::ostream& os, UIContext& ctx);123 void DoImport(const cpp::stmt_iterator& sit, UIContext& ctx);124 void CalcSizeEx(ImVec2 p1, UIContext& ctx);125 const char* GetIcon() const { return ICON_FA_FOLDER_CLOSED; }126 const TabBar& Defaults() { static TabBar var(UIContext::Defaults()); return var; }127};128 129struct TabItem : Widget130{131 bindable<std::string> label = "TabItem";132 direct_val<bool> closeButton = false;133 event<> onClose;134 135 TabItem(UIContext& ctx);136 auto Clone(UIContext& ctx)->std::unique_ptr<Widget>;137 int Behavior() { return SnapInterior | SnapGrandparentClip | NoOverlayPos; }138 ImDrawList* DoDraw(UIContext& ctx);139 void DoDrawTools(UIContext& ctx);140 auto Properties()->std::vector<Prop>;141 bool PropertyUI(int i, UIContext& ctx);142 auto Events()->std::vector<Prop>;143 bool EventUI(int i, UIContext& ctx);144 void DoExport(std::ostream& os, UIContext& ctx);145 void DoImport(const cpp::stmt_iterator& sit, UIContext& ctx);146 void CalcSizeEx(ImVec2 p1, UIContext& ctx);147 const char* GetIcon() const { return ICON_FA_FOLDER; }148 const TabItem& Defaults() { static TabItem var(UIContext::Defaults()); return var; }149};150 151struct TreeNode : Widget152{153 direct_val<ImGuiTreeNodeFlags_> flags;154 bindable<std::string> label = "Node";155 bindable<bool> open;156 bool lastOpen;157 158 TreeNode(UIContext& ctx);159 auto Clone(UIContext& ctx)->std::unique_ptr<Widget>;160 int Behavior() { return Widget::Behavior() | SnapInterior; }161 ImDrawList* DoDraw(UIContext& ctx);162 auto Properties()->std::vector<Prop>;163 bool PropertyUI(int i, UIContext& ctx);164 void DoExport(std::ostream& os, UIContext& ctx);165 void DoImport(const cpp::stmt_iterator& sit, UIContext& ctx);166 void CalcSizeEx(ImVec2 p1, UIContext& ctx);167 const char* GetIcon() const { return ICON_FA_SITEMAP; }168 const TreeNode& Defaults() { static TreeNode var(UIContext::Defaults()); return var; }169};170 171struct MenuBar : Widget172{173 MenuBar(UIContext& ctx);174 auto Clone(UIContext& ctx)->std::unique_ptr<Widget>;175 int Behavior() { return NoOverlayPos; }176 ImDrawList* DoDraw(UIContext& ctx);177 auto Properties()->std::vector<Prop>;178 bool PropertyUI(int i, UIContext& ctx);179 auto Events()->std::vector<Prop>;180 bool EventUI(int i, UIContext& ctx);181 void DoExport(std::ostream& os, UIContext& ctx);182 void DoImport(const cpp::stmt_iterator& sit, UIContext& ctx);183 void CalcSizeEx(ImVec2 p1, UIContext& ctx);184 const char* GetIcon() const { return ICON_FA_ELLIPSIS; }185 const MenuBar& Defaults() { static MenuBar var(UIContext::Defaults()); return var; }186};187 188struct ContextMenu : Widget189{190 direct_val<std::string> label = "Item";191 direct_val<pzdimension2_t> style_padding;192 direct_val<pzdimension2_t> style_spacing;193 direct_val<pzdimension_t> style_rounding;194 195 ContextMenu(UIContext& ctx);196 auto Clone(UIContext& ctx)->std::unique_ptr<Widget>;197 int Behavior() { return NoOverlayPos | NoContextMenu; }198 ImDrawList* DoDraw(UIContext& ctx);199 auto Properties()->std::vector<Prop>;200 bool PropertyUI(int i, UIContext& ctx);201 auto Events()->std::vector<Prop>;202 bool EventUI(int i, UIContext& ctx);203 void DoExport(std::ostream& os, UIContext& ctx);204 void ExportAllShortcuts(std::ostream& os, UIContext& ctx);205 void DoImport(const cpp::stmt_iterator& sit, UIContext& ctx);206 void CalcSizeEx(ImVec2 p1, UIContext& ctx);207 const char* GetIcon() const { return ICON_FA_MESSAGE; }208 const ContextMenu& Defaults() { static ContextMenu var(UIContext::Defaults()); return var; }209};210 211struct MenuIt : Widget212{213 direct_val<bool> ownerDraw = false;214 direct_val<std::string> label = "Item";215 direct_val<shortcut_t> shortcut = "";216 direct_val<bool> separator = false;217 bindable<bool> checked;218 event<> onChange;219 220 MenuIt(UIContext& ctx);221 auto Clone(UIContext& ctx)->std::unique_ptr<Widget>;222 int Behavior() { return NoOverlayPos | NoContextMenu; }223 ImDrawList* DoDraw(UIContext& ctx);224 void DoDrawTools(UIContext& ctx);225 auto Properties()->std::vector<Prop>;226 bool PropertyUI(int i, UIContext& ctx);227 auto Events()->std::vector<Prop>;228 bool EventUI(int i, UIContext& ctx);229 void DoExport(std::ostream& os, UIContext& ctx);230 void ExportShortcut(std::ostream& os, UIContext& ctx);231 void ExportAllShortcuts(std::ostream& os, UIContext& ctx);232 void DoImport(const cpp::stmt_iterator& sit, UIContext& ctx);233 void CalcSizeEx(ImVec2 p1, UIContext& ctx);234 const char* GetIcon() const { return ICON_FA_BARS; }235 const MenuIt& Defaults() { static MenuIt var(UIContext::Defaults()); return var; }236};237 238struct Splitter : Widget239{240 direct_val<dimension_t> min_size1 = 10;241 direct_val<dimension_t> min_size2 = 10;242 field_ref<dimension_t> position;243 bindable<color_t> style_active;244 bindable<color_t> style_bg;245 246 Splitter(UIContext& ctx);247 auto Clone(UIContext& ctx)->std::unique_ptr<Widget>;248 int Behavior() { return Widget::Behavior() | SnapInterior | HasSizeX | HasSizeY | NoOverlayPos; }249 ImDrawList* DoDraw(UIContext& ctx);250 auto Properties()->std::vector<Prop>;251 bool PropertyUI(int i, UIContext& ctx);252 void DoExport(std::ostream& os, UIContext& ctx);253 void DoImport(const cpp::stmt_iterator& sit, UIContext& ctx);254 //void CalcSizeEx(ImVec2 p1, UIContext& ctx);255 const char* GetIcon() const { return ICON_FA_TABLE_COLUMNS; }256 const Splitter& Defaults() { static Splitter var(UIContext::Defaults()); return var; }257};258 