3#include "MRPch/MRFmt.h" 
   23[[nodiscard]] MRVIEWER_API 
float scale();
 
   38[[nodiscard]] MRVIEWER_API 
bool readBool( std::string_view key, 
bool defaultValue = 
false );
 
   39MRVIEWER_API 
void writeBool( std::string_view key, 
bool value );
 
 
   68    ImGuiButtonFlags 
flags = ImGuiButtonFlags_None;
 
 
  135[[deprecated( 
"Use UI::buttonEx( label, size, params ) instead" )]]
 
  136MRVIEWER_API 
bool buttonEx( 
const char* label,
bool active, 
const Vector2f& 
size = Vector2f( 0, 0 ),
 
  143MRVIEWER_API 
bool button( 
const char* label, 
bool active, 
const Vector2f& 
size = Vector2f( 0, 0 ), ImGuiKey key = ImGuiKey_None );
 
  146inline bool button( 
const char* label, 
const Vector2f& 
size = Vector2f( 0, 0 ), ImGuiKey key = ImGuiKey_None )
 
 
  152MRVIEWER_API 
bool buttonCommonSize( 
const char* label, 
const Vector2f& 
size = Vector2f( 0, 0 ), ImGuiKey key = ImGuiKey_None );
 
  154MRVIEWER_API 
bool buttonUnique( 
const char* label, 
int* value, 
int ownValue, 
const Vector2f& 
size = Vector2f( 0, 0 ), ImGuiKey key = ImGuiKey_None );
 
  163    const std::string& name,
 
  164    const Vector2f& iconSize,
 
  165    const std::string& text,
 
  166    const ImVec2& buttonSize,
 
  170inline bool buttonIcon( 
const std::string& name, 
const Vector2f& iconSize, 
const std::string& text, 
const ImVec2& buttonSize )
 
  172    return buttonIconEx( name, iconSize, text, buttonSize );
 
 
  176    const std::string& name,
 
  177    const Vector2f& iconSize,
 
  178    const std::string& text,
 
  179    const ImVec2& buttonSize,
 
  180    bool textUnderIcon = 
true,
 
  181    ImGuiKey key = ImGuiKey_None )
 
 
  193    const std::string& iconName,
 
  194    const Vector2f& iconSize,
 
  195    const std::string& text,
 
  196    const ImVec2& buttonSize,
 
  199    bool textUnderIcon = 
true,
 
  200    ImGuiKey key = ImGuiKey_None );
 
  204MRVIEWER_API 
bool toggle( 
const char* label, 
bool* value );
 
  206MRVIEWER_API 
bool checkbox( 
const char* label, 
bool* value );
 
  210MRVIEWER_API 
bool checkboxValid( 
const char* label, 
bool* value, 
bool valid );
 
  212MRVIEWER_API 
bool checkboxMixed( 
const char* label, 
bool* value, 
bool mixed );
 
  214template <
typename Getter, 
typename Setter>
 
  218    bool ret = 
checkbox( label, &value );
 
 
  222template <
typename Getter, 
typename Setter>
 
  235    bool value = bool( target & flags );
 
  236    bool mixed = value && ( target & flags ) != flags;
 
 
  277MRVIEWER_API 
bool radioButton( 
const char* label, 
int* value, 
int valButton );
 
  289    [[nodiscard]] 
explicit operator int()
 const 
 
 
  304MRVIEWER_API 
bool colorEdit4( 
const char* label, Vector4f& color, ImGuiColorEditFlags flags = ImGuiColorEditFlags_None );
 
  305MRVIEWER_API 
bool colorEdit4( 
const char* label, 
Color& color, ImGuiColorEditFlags flags = ImGuiColorEditFlags_None );
 
  308MRVIEWER_API 
bool combo( 
const char* label, 
int* v, 
const std::vector<std::string>& options,
 
  309    bool showPreview = 
true, 
const std::vector<std::string>& tooltips = {}, 
const std::string& defaultText = 
"Not selected" );
 
  312MRVIEWER_API 
bool beginCombo( 
const char* label, 
const std::string& text = 
"Not selected", 
bool showPreview = 
true );
 
  313MRVIEWER_API 
void endCombo( 
bool showPreview = 
true );
 
  316MRVIEWER_API 
bool inputText( 
const char* label, std::string& str, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = 
nullptr, 
void* user_data = 
nullptr );
 
  318MRVIEWER_API 
bool inputTextIntoArray( 
const char* label, 
char* array, std::size_t 
size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = 
nullptr, 
void* user_data = 
nullptr );
 
  321MRVIEWER_API 
bool inputTextMultiline( 
const char* label, std::string& str, 
const ImVec2& 
size = ImVec2(), ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = 
nullptr, 
void* user_data = 
nullptr );
 
  323MRVIEWER_API 
bool inputTextIntoArrayMultiline( 
const char* label, 
char* buf, 
size_t buf_size, 
const ImVec2& 
size = ImVec2(), ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = 
nullptr, 
void* user_data = 
nullptr );
 
  334MRVIEWER_API 
bool inputTextCentered( 
const char* label, std::string& str, 
float width = 0.0f, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = 
nullptr, 
void* user_data = 
nullptr );
 
  337MRVIEWER_API 
void inputTextCenteredReadOnly( 
const char* label, 
const std::string& str, 
float width = 0.0f, 
const std::optional<ImVec4>& textColor = {}, 
const std::optional<ImVec4>& labelColor = {} );
 
  343    MRVIEWER_API 
bool genericSlider( 
const char* label, ImGuiDataType data_type, 
void* p_data, 
const void* p_min, 
const void* p_max, 
const char* format, ImGuiSliderFlags flags );
 
  346    template <
typename T>
 
  347    concept Scalar = std::is_arithmetic_v<T> && !std::is_same_v<T, bool>;
 
  350    template <
typename T>
 
  355    template <
typename Bound, 
typename Target>
 
  357        std::same_as<Bound, Target> ||
 
  362    template <
typename Speed, 
typename Target>
 
  364        std::same_as<Speed, typename VectorTraits<Target>::BaseType> || std::same_as<Speed, float> ||
 
  365        std::same_as<Speed, Target> || std::same_as<Speed, typename VectorTraits<Target>::template ChangeBase<float>>;
 
  377    template <UnitEnum E, VectorOrScalar T, 
typename F>
 
  386template <UnitEnum E, detail::VectorOrScalar T>
 
  391template <UnitEnum E, detail::VectorOrScalar T, detail::VectorOrScalar TargetType>
 
  398template <UnitEnum E, detail::VectorOrScalar T, detail::Val
idBoundForTargetType<T> U = 
typename VectorTraits<T>::BaseType>
 
  406template <UnitEnum E, detail::VectorOrScalar T, detail::Val
idDragSpeedForTargetType<T> SpeedType = 
float, detail::Val
idBoundForTargetType<T> U = 
typename VectorTraits<T>::BaseType>
 
  407bool drag( 
const char* label, T& v, SpeedType vSpeed = 
getDefaultDragSpeed<E, SpeedType>(), 
const U& vMin = std::numeric_limits<U>::lowest(), 
const U& vMax = std::numeric_limits<U>::max(), 
UnitToStringParams<E> unitParams = {}, ImGuiSliderFlags flags = 
defaultSliderFlags, 
const U& step = 
getDefaultStep<E, U, T>( 
false ), 
const U& stepFast = 
getDefaultStep<E, U, T>( 
true ) );
 
  410template <UnitEnum E, detail::VectorOrScalar T, detail::Val
idBoundForTargetType<T> U = 
typename VectorTraits<T>::BaseType>
 
  417template <UnitEnum E, detail::VectorOrScalar T>
 
  425template <UnitEnum E, detail::Scalar T, 
typename F>
 
  432template <UnitEnum E, detail::Scalar T, detail::Val
idDragSpeedForTargetType<T> SpeedType = 
float, 
typename F = std::
nullptr_t>
 
  438template <UnitEnum E, detail::Scalar T, 
typename F = std::
nullptr_t>
 
  491MRVIEWER_API 
void separator( 
const std::string& text = 
"", 
int issueCount = -1 );
 
  493    const std::string& text,
 
  495    const std::string& issueCount );
 
  498MRVIEWER_API 
void separator( 
const ImGuiImage& icon, 
const std::string& text, 
const Vector2f& iconSize = { 24.f, 24.f } );
 
  499MRVIEWER_API 
void separator( 
const std::string& iconName, 
const std::string& text, 
const Vector2f& iconSize = { 24.f, 24.f } );
 
  505MRVIEWER_API 
void progressBar( 
float fraction, 
const Vector2f& 
size = Vector2f( -1, 0 ) );
 
  508MRVIEWER_API 
bool beginTabBar( 
const char* str_id, ImGuiTabBarFlags flags = 0 );
 
  510MRVIEWER_API 
bool beginTabItem( 
const char* label, 
bool* p_open = NULL, ImGuiTabItemFlags flags = 0 );
 
  537MRVIEWER_API 
void highlightWindowArea( 
const ImVec2& min = {-1.0f, -1.0f}, 
const ImVec2& max = { -1.0f, -1.0f } );
 
  543    ImDrawFlags oldFlags{};
 
  547        : list( list ), oldFlags( list.Flags )
 
  549        list.Flags &= ~ImDrawListFlags_AntiAliasedLines;
 
 
  557        list.Flags = oldFlags;
 
 
 
  565#include "MRUIStyle.ipp" 
Definition MRImGuiImage.h:14
Definition MRUIStyle.h:541
LineAntialiasingDisabler & operator=(const LineAntialiasingDisabler &)=delete
LineAntialiasingDisabler(ImDrawList &list)
Definition MRUIStyle.h:546
LineAntialiasingDisabler(const LineAntialiasingDisabler &)=delete
~LineAntialiasingDisabler()
Definition MRUIStyle.h:555
Definition MRUIStyle.h:347
Definition MRUIStyle.h:356
Definition MRUIStyle.h:363
Definition MRUIStyle.h:351
auto width(const Box< V > &box)
returns size along x axis
Definition MRMesh/MRBox.h:341
constexpr const V & get(const Box< V > &box) noexcept
get<0> returns min, get<1> returns max
Definition MRMesh/MRBox.h:387
MRVIEWER_API bool readBool(std::string_view key, bool defaultValue=false)
MRVIEWER_API void writeBool(std::string_view key, bool value)
MRVIEWER_API void setScale(float newScale)
MRVIEWER_API bool genericSlider(const char *label, ImGuiDataType data_type, void *p_data, const void *p_min, const void *p_max, const char *format, ImGuiSliderFlags flags)
bool unitWidget(const char *label, T &v, UnitToStringParams< E > &unitParams, F &&func)
TextureType
Definition MRUIStyle.h:45
MRVIEWER_API bool checkboxOrModifier(const char *label, CheckboxOrModifierState &value, int modifiers, int respectedModifiers=-1, std::optional< bool > valueOverride={})
MRVIEWER_API std::unique_ptr< ImGuiImage > & getTexture(TextureType type)
MRVIEWER_API bool inputTextMultilineFullyScrollable(CachedTextSize &cache, const char *label, std::string &str, const ImVec2 &size=ImVec2(), ImGuiInputTextFlags flags=0, ImGuiInputTextCallback callback=nullptr, void *user_data=nullptr)
This version adds a horizontal scrollbar. Also it never draws the label, and uses full window width b...
MRVIEWER_API bool radioButtonOrModifier(const char *label, RadioButtonOrModifierState &value, int valButton, int modifiers, int respectedModifiers=-1, std::optional< int > valueOverride={})
MRVIEWER_API void endTabBar()
MRVIEWER_API bool isItemActive(const char *name)
bool inputPlusMinus(const char *label, T &plus, T &minus, T plusMin=T{}, T plusMax=std::numeric_limits< T >::max(), UnitToStringParams< E > unitParams={}, ImGuiSliderFlags flags=defaultSliderFlags, F &&wrapFunc=nullptr)
MRVIEWER_API void transparentTextWrapped(const char *fmt,...)
similar to ImGui::TextWrapped but use current text color with alpha channel = 0.5
MRVIEWER_API bool inputTextIntoArrayMultiline(const char *label, char *buf, size_t buf_size, const ImVec2 &size=ImVec2(), ImGuiInputTextFlags flags=0, ImGuiInputTextCallback callback=nullptr, void *user_data=nullptr)
This overload is for arrays, as opposed to std::strings.
MRVIEWER_API void endTabItem()
bool buttonIcon(const std::string &name, const Vector2f &iconSize, const std::string &text, const ImVec2 &buttonSize)
Definition MRUIStyle.h:170
MRVIEWER_API void alignTextToButton()
Specialization of alignTextToFramePadding for UI::button with default height.
T getDefaultStep(bool fast)
MRVIEWER_API void alignTextToCheckBox()
Specialization of alignTextToFramePadding for UI::checkbox.
MRVIEWER_API void notificationFrame(NotificationType type, const std::string &str)
similar to ImGui::TextWrapped but also have styled background and notification type indicator
bool buttonIconFlatBG(const std::string &name, const Vector2f &iconSize, const std::string &text, const ImVec2 &buttonSize, bool textUnderIcon=true, ImGuiKey key=ImGuiKey_None)
Definition MRUIStyle.h:175
MRVIEWER_API bool checkbox(const char *label, bool *value)
draw gradient checkbox
bool dragPlusMinus(const char *label, T &plus, T &minus, SpeedType speed=getDefaultDragSpeed< E, SpeedType >(), T plusMin=T{}, T plusMax=std::numeric_limits< T >::max(), UnitToStringParams< E > unitParams={}, ImGuiSliderFlags flags=defaultSliderFlags, F &&wrapFunc=nullptr)
MRVIEWER_API void highlightWindowArea(const ImVec2 &min={-1.0f, -1.0f}, const ImVec2 &max={ -1.0f, -1.0f })
MRVIEWER_API float scale()
MRVIEWER_API void inputTextCenteredReadOnly(const char *label, const std::string &str, float width=0.0f, const std::optional< ImVec4 > &textColor={}, const std::optional< ImVec4 > &labelColor={})
draw read-only text box with text aligned by center
MRVIEWER_API bool inputTextIntoArrayMultilineFullyScrollable(CachedTextSize &cache, const char *label, char *buf, size_t buf_size, const ImVec2 &size=ImVec2(), ImGuiInputTextFlags flags=0, ImGuiInputTextCallback callback=nullptr, void *user_data=nullptr)
MRVIEWER_API void separator(const SeparatorParams ¶ms)
separator line with customizations
MRVIEWER_API void alignTextToControl(float controlHeight)
MRVIEWER_API bool checkKey(ImGuiKey passedKey)
returns true if button is pressed in this frame, preserve its further processing in viewer keyboard e...
bool drag(const char *label, T &v, SpeedType vSpeed=getDefaultDragSpeed< E, SpeedType >(), const U &vMin=std::numeric_limits< U >::lowest(), const U &vMax=std::numeric_limits< U >::max(), UnitToStringParams< E > unitParams={}, ImGuiSliderFlags flags=defaultSliderFlags, const U &step=getDefaultStep< E, U, T >(false), const U &stepFast=getDefaultStep< E, U, T >(true))
MRVIEWER_API bool beginCombo(const char *label, const std::string &text="Not selected", bool showPreview=true)
draw custom content combo box
float getDefaultDragSpeed()
constexpr int defaultSliderFlags
Definition MRUIStyle.h:383
bool plusMinusGeneric(const char *label, T &plus, T &minus, UnitToStringParams< E > unitToStringParams, F &&func)
bool slider(const char *label, T &v, const U &vMin, const U &vMax, UnitToStringParams< E > unitParams={}, ImGuiSliderFlags flags=defaultSliderFlags)
MRVIEWER_API bool combo(const char *label, int *v, const std::vector< std::string > &options, bool showPreview=true, const std::vector< std::string > &tooltips={}, const std::string &defaultText="Not selected")
draw combo box
MRVIEWER_API const std::pair< const char *, ImU32 > & notificationChar(NotificationType type)
returns icons font character for given notification type, and its color
MRVIEWER_API bool radioButton(const char *label, int *value, int valButton)
draw gradient radio button
MRVIEWER_API void mouseControlHint(ImGuiMouseButton btn, const std::string &hint)
draws hint with corresponding mouse btn icon
MRVIEWER_API bool checkboxValid(const char *label, bool *value, bool valid)
If valid is false checkbox is disabled. Same as checkboxOrFixedValue( ..., valid ?...
MRVIEWER_API void alignTextToRadioButton()
Specialization of alignTextToFramePadding for UI::radioButton.
MRVIEWER_API void endCombo(bool showPreview=true)
MRVIEWER_API bool buttonEx(const char *label, bool active, const Vector2f &size=Vector2f(0, 0), ImGuiButtonFlags flags=ImGuiButtonFlags_None, const ButtonCustomizationParams &customParams={})
draw gradient button, which can be disabled (active = false)
MRVIEWER_API bool inputTextIntoArray(const char *label, char *array, std::size_t size, ImGuiInputTextFlags flags=0, ImGuiInputTextCallback callback=nullptr, void *user_data=nullptr)
This overload is for arrays, as opposed to std::strings.
MRVIEWER_API void transparentText(const char *fmt,...)
similar to ImGui::Text but use current text color with alpha channel = 0.5
MRVIEWER_API void init()
init internal parameters
MRVIEWER_API bool checkboxOrFixedValue(const char *label, bool *value, std::optional< bool > valueOverride)
If valueOverride is specified, then the checkbox is disabled and that value is displayed instead of v...
void readOnlyValue(const char *label, const T &v, std::optional< ImVec4 > textColor={}, UnitToStringParams< E > unitParams={}, std::optional< ImVec4 > labelColor={})
MRVIEWER_API bool colorEdit4(const char *label, Vector4f &color, ImGuiColorEditFlags flags=ImGuiColorEditFlags_None)
draw gradient color edit 4
MRVIEWER_API bool buttonUniqueIcon(const std::string &iconName, const Vector2f &iconSize, const std::string &text, const ImVec2 &buttonSize, int *value, int ownValue, bool textUnderIcon=true, ImGuiKey key=ImGuiKey_None)
MRVIEWER_API bool inputTextMultiline(const char *label, std::string &str, const ImVec2 &size=ImVec2(), ImGuiInputTextFlags flags=0, ImGuiInputTextCallback callback=nullptr, void *user_data=nullptr)
Draws multiline text input, should be used instead of ImGui::InputTextMultiline().
MRVIEWER_API bool checkboxMixed(const char *label, bool *value, bool mixed)
draw gradient checkbox with mixed state
MRVIEWER_API bool buttonIconEx(const std::string &name, const Vector2f &iconSize, const std::string &text, const ImVec2 &buttonSize, const ButtonIconCustomizationParams ¶ms={})
MRVIEWER_API bool beginTabBar(const char *str_id, ImGuiTabBarFlags flags=0)
MRVIEWER_API void drawPoltHorizontalAxis(const PlotAxis &plotAxis)
bool checkboxFlags(const char *label, T &target, T flags)
Draw a checkbox toggling one or more bits in the mask.
Definition MRUIStyle.h:233
bool input(const char *label, T &v, const U &vMin=std::numeric_limits< U >::lowest(), const U &vMax=std::numeric_limits< U >::max(), UnitToStringParams< E > unitParams={}, ImGuiSliderFlags flags=defaultSliderFlags)
MRVIEWER_API void drawPoltVerticalAxis(const PlotAxis &plotAxis)
MRVIEWER_API bool buttonUnique(const char *label, int *value, int ownValue, const Vector2f &size=Vector2f(0, 0), ImGuiKey key=ImGuiKey_None)
draw button with same logic as radioButton
MRVIEWER_API void setTooltipIfHovered(const std::string &text)
draw tooltip only if current item is hovered
MRVIEWER_API ImGuiKey getImGuiModPrimaryCtrl()
returns imgui modifier Id based on current environment
MRVIEWER_API bool button(const char *label, bool active, const Vector2f &size=Vector2f(0, 0), ImGuiKey key=ImGuiKey_None)
MRVIEWER_API bool toggle(const char *label, bool *value)
draws checkbox-like toggle (enabled/disabled states)(O=)/(=O)
MRVIEWER_API bool radioButtonOrFixedValue(const char *label, int *value, int valButton, std::optional< int > valueOverride)
If valueOverride is specified, then the radio button is disabled and that value is displayed instead ...
MRVIEWER_API bool inputText(const char *label, std::string &str, ImGuiInputTextFlags flags=0, ImGuiInputTextCallback callback=nullptr, void *user_data=nullptr)
Draws text input, should be used instead of ImGui::InputText().
MRVIEWER_API void progressBar(float fraction, const Vector2f &size=Vector2f(-1, 0))
MRVIEWER_API void alignTextToFramePadding(float padding)
MRVIEWER_API bool beginTabItem(const char *label, bool *p_open=NULL, ImGuiTabItemFlags flags=0)
MRVIEWER_API bool inputTextCentered(const char *label, std::string &str, float width=0.0f, ImGuiInputTextFlags flags=0, ImGuiInputTextCallback callback=nullptr, void *user_data=nullptr)
draw input text box with text aligned by center
MRVIEWER_API bool buttonCommonSize(const char *label, const Vector2f &size=Vector2f(0, 0), ImGuiKey key=ImGuiKey_None)
Definition MRCameraOrientationPlugin.h:8
ImVec2 size(const ViewportRectangle &rect)
Definition MRViewport.h:29
NotificationType
Definition MRNotificationType.h:7
std::variant< > VarUnitToStringParams
Definition MRUnits.h:330
Definition MRMesh/MRColor.h:9
Definition MRUIStyle.h:326
std::optional< ImVec2 > cachedSize
Definition MRUIStyle.h:327
Definition MRUIStyle.h:249
bool modifierHeld
Definition MRUIStyle.h:253
CheckboxOrModifierState()
Definition MRUIStyle.h:255
CheckboxOrModifierState(bool baseValue)
Definition MRUIStyle.h:257
bool baseValue
Definition MRUIStyle.h:251
Definition MRUIStyle.h:103
float size
Definition MRUIStyle.h:108
VarUnitToStringParams labelFormatParams
Definition MRUIStyle.h:125
float lenDash
Definition MRUIStyle.h:119
size_t textDashIndicesStep
Definition MRUIStyle.h:116
float minValue
Definition MRUIStyle.h:112
float lenDashWithText
Definition MRUIStyle.h:121
ImVec2 startAxisPoint
Definition MRUIStyle.h:105
float optimalLenth
Definition MRUIStyle.h:110
float maxValue
Definition MRUIStyle.h:114
float textPadding
Definition MRUIStyle.h:123
Parameters for drawing custom separator.
Definition MRUIStyle.h:460
std::string suffix
framed text after label (might be used for some indications)
Definition MRUIStyle.h:471
std::optional< Color > suffixFrameColor
color of background frame behind suffix (if not present default ImGuiCol_FrameBg is used)
Definition MRUIStyle.h:474
const ImGuiImage * icon
optional icon in the left part of separator
Definition MRUIStyle.h:462
Vector2f iconSize
size of icon
Definition MRUIStyle.h:465
bool forceImGuiSpacing
Definition MRUIStyle.h:478
float extraScale
The spacing is multiplied by this.
Definition MRUIStyle.h:481
std::string label
label at the left part of separator (drawn after icon if present)
Definition MRUIStyle.h:468
Definition MRMesh/MRVectorTraits.h:15
static constexpr int size
Definition MRMesh/MRVectorTraits.h:19
T BaseType
Definition MRMesh/MRVectorTraits.h:18