17#include <misc/cpp/imgui_stdlib.h> 
   33static auto vector_getter = [](
void* vec, 
int idx, 
const char** out_text)
 
   35  auto& vector = *
static_cast<std::vector<std::string>*
>(vec);
 
   36  if (idx < 0 || idx >= 
static_cast<int>(vector.size())) { 
return false; }
 
   37  *out_text = vector.at(idx).c_str();
 
   41inline bool Combo(
const char* label, 
int* idx, 
const std::vector<std::string>& values)
 
   43  if (values.empty()) { 
return false; }
 
   44  return Combo(label, idx, vector_getter,
 
   45    const_cast<void *
>( 
static_cast<const void*
>(&values) ), (
int)values.size());
 
 
   48inline bool Combo(
const char* label, 
int* idx, std::function<
const char *(
int)> getter, 
int items_count)
 
   50  auto func = [](
void* data, 
int i, 
const char** out_text) {
 
   51    auto &getter = *
reinterpret_cast<std::function<
const char *(
int)
> *>(data);
 
   52    const char *s = getter(i);
 
   53    if (s) { *out_text = s; 
return true; }
 
   54    else { 
return false; }
 
   56  return Combo(label, idx, func, 
reinterpret_cast<void *
>(&getter), items_count);
 
 
   59inline bool ListBox(
const char* label, 
int* idx, 
const std::vector<std::string>& values)
 
   61  if (values.empty()) { 
return false; }
 
   62  return ListBox(label, idx, vector_getter,
 
   63    const_cast<void *
>( 
static_cast<const void*
>(&values) ), (
int)values.size());
 
 
   66inline bool InputText(
const char* label, std::string &str, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, 
void* user_data = NULL)
 
 
   75MRVIEWER_API 
bool DragFloatValid( 
const char *label, 
float* value, 
float speed=1.0f,
 
   76                                float min = std::numeric_limits<float>::lowest(),
 
   77                                float max = std::numeric_limits<float>::max(),
 
   78                                const char* format = 
"%.3f", ImGuiSliderFlags flags = 0 );
 
   95    float min = std::numeric_limits<float>::lowest(),
 
   96    float max = std::numeric_limits<float>::max(),
 
   97    const char* format = 
"%.3f", ImGuiSliderFlags flags = 0,
 
   98    const char* ( *tooltips )[2] = 
nullptr );
 
  105    float min = std::numeric_limits<float>::lowest(),
 
  106    float max = std::numeric_limits<float>::max(),
 
  107    const char* format = 
"%.3f", ImGuiSliderFlags flags = 0,
 
  108    const char* (*tooltips)[3] = 
nullptr );
 
  113MRVIEWER_API 
bool DragIntValid( 
const char *label, 
int* value, 
float speed = 1,
 
  114                                int min = std::numeric_limits<int>::lowest(),
 
  115                                int max = std::numeric_limits<int>::max(),
 
  116                                const char* format = 
"%d" );
 
  123                                int min = std::numeric_limits<int>::lowest(),
 
  124                                int max = std::numeric_limits<int>::max(),
 
  125                                const char* format = 
"%d",
 
  126                                const char* ( *tooltips )[3] = 
nullptr );
 
  131MRVIEWER_API 
bool InputIntValid( 
const char* label, 
int* value, 
int min, 
int max,
 
  132    int step = 1, 
int step_fast = 100, ImGuiInputTextFlags flags = 0 );
 
  135template<
typename Getter, 
typename Setter>
 
  136inline bool Checkbox(
const char* label, Getter get, Setter set)
 
 
  159                                 std::function<
float( 
int idx )> values_getter,
 
  160                                 std::function<
void( 
int idx )> tooltip,
 
  161                                 std::function<
void( 
int idx )> on_click,
 
  162                                 int values_count, 
int values_offset = 0,
 
  163                                 float scale_min = FLT_MAX, 
float scale_max = FLT_MAX,
 
  164                                 ImVec2 frame_size = ImVec2( 0, 0 ), 
int selectedBarId = -1, 
int hoveredBarId = -1,
 
  165                                 const std::vector<HistogramGridLine>& gridIndexes = {},
 
  166                                 const std::vector<HistogramGridLine>& gridValues = {} );
 
  191    ImGuiWindowFlags 
flags = ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize;
 
 
  216MRVIEWER_API std::pair<ImVec2, bool> 
LoadSavedWindowPos( 
const char* label, ImGuiWindow* window, 
float width, 
const ImVec2* position = 
nullptr );
 
  217inline std::pair<ImVec2, bool> 
LoadSavedWindowPos( 
const char* label, 
float width, 
const ImVec2* position = 
nullptr )
 
 
  257MRVIEWER_API 
bool InputIntBitSet( 
const char* label, 
int* v, 
const MR::BitSet& bs, 
int step = 1, 
int step_fast = 100, ImGuiInputTextFlags flags = 0 );
 
  264MRVIEWER_API 
bool DragInputInt( 
const char* label, 
int* value, 
float speed = 1, 
int min = std::numeric_limits<int>::lowest(),
 
  265                                int max = std::numeric_limits<int>::max(), 
const char* format = 
"%d", ImGuiSliderFlags flags = ImGuiSliderFlags_None );
 
  271MRVIEWER_API 
bool Link( 
const char* label, uint32_t color = 
MR::Color( 60, 120, 255 ).getUInt32() );
 
  294    std::
string& presetName,
 
  296    bool* fixZero = 
nullptr,
 
  298    float min = std::numeric_limits<
float>::lowest(),
 
  299    float max = std::numeric_limits<
float>::max()
 
  323MRVIEWER_API 
void Image( 
const MR::ImGuiImage& image, 
const ImVec2& size, 
const ImVec4& multColor = { 1, 1, 1, 1 } );
 
  339inline float getExpSpeed( 
float val, 
float frac = 0.01f, 
float min = 1e-5f )
 
  340    { 
return std::max( val * frac, min ); }
 
 
  345    return 0.2126f * col.x + 0.7152f * col.y + 0.0722f * col.z;
 
 
 
#define MR_MAKE_FLAG_OPERATORS(T)
Definition MRFlagOperators.h:6
Definition MRMesh/MRBitSet.h:28
Definition MRImGuiImage.h:14
Definition ImGuiHelpers.h:31
bool Checkbox(const char *label, Getter get, Setter set)
Definition ImGuiHelpers.h:136
MRVIEWER_API MultiDragRes DragIntValid3(const char *label, int v[3], float speed=1, int min=std::numeric_limits< int >::lowest(), int max=std::numeric_limits< int >::max(), const char *format="%d", const char *(*tooltips)[3]=nullptr)
MRVIEWER_API void SaveWindowPosition(const char *label, ImGuiWindow *window)
MRVIEWER_API MultiDragRes DragFloatValid3(const char *label, float v[3], float v_speed=1.0f, float min=std::numeric_limits< float >::lowest(), float max=std::numeric_limits< float >::max(), const char *format="%.3f", ImGuiSliderFlags flags=0, const char *(*tooltips)[3]=nullptr)
MRVIEWER_API MR::Vector2i GetImagePointerCoord(const MR::ImGuiImage &image, const ImVec2 &size, const ImVec2 &imagePos)
get image coordinates under cursor considering Y-direction flipping
MRVIEWER_API void Plane(MR::PlaneWidget &planeWidget, PlaneWidgetFlags flags={})
float getExpSpeed(float val, float frac=0.01f, float min=1e-5f)
get exponential speed for this value
Definition ImGuiHelpers.h:339
MRVIEWER_API bool BeginStatePlugin(const char *label, bool *open, float width)
begin typical state plugin window
PlaneWidgetFlags
Definition ImGuiHelpers.h:304
PaletteChanges
Definition ImGuiHelpers.h:276
MRVIEWER_API bool DragFloatValid(const char *label, float *value, float speed=1.0f, float min=std::numeric_limits< float >::lowest(), float max=std::numeric_limits< float >::max(), const char *format="%.3f", ImGuiSliderFlags flags=0)
MRVIEWER_API bool ModalExitButton()
draw exit button with close cross (i.e. for settings modal popup )
MRVIEWER_API bool DragInputInt(const char *label, int *value, float speed=1, int min=std::numeric_limits< int >::lowest(), int max=std::numeric_limits< int >::max(), const char *format="%d", ImGuiSliderFlags flags=ImGuiSliderFlags_None)
Combine of ImGui::DragInt and ImGui::InputInt.
MRVIEWER_API void Image(const MR::ImGuiImage &image, const ImVec2 &size, const MR::Color &multColor)
draw image with Y-direction inversed up-down
bool ListBox(const char *label, int *idx, const std::vector< std::string > &values)
Definition ImGuiHelpers.h:59
bool InputText(const char *label, std::string &str, ImGuiInputTextFlags flags=0, ImGuiInputTextCallback callback=NULL, void *user_data=NULL)
Definition ImGuiHelpers.h:66
MRVIEWER_API bool InputIntValid(const char *label, int *value, int min, int max, int step=1, int step_fast=100, ImGuiInputTextFlags flags=0)
MRVIEWER_API bool DragFloatValidLineWidth(const char *label, float *value)
similar to ImGui::DragFloatValid but use available line width range
MRVIEWER_API ImVec2 GetDownPosition(const float width)
MRVIEWER_API void EndCustomStatePlugin()
end state plugin window with custom style
MRVIEWER_API bool Direction(MR::DirectionWidget &dirWidget, bool &editDragging, const std::string &historyName)
MRVIEWER_API bool BeginCustomStatePlugin(const char *label, bool *open, const CustomStatePluginWindowParameters ¶ms={})
MRVIEWER_API float GetTitleBarHeght()
Calculate and return the height of the window title.
MRVIEWER_API bool BeginModalNoAnimation(const char *label, bool *open=nullptr, ImGuiWindowFlags flags=0)
starts modal window with no animation for background
MRVIEWER_API PaletteChanges Palette(const char *label, MR::Palette &palette, std::string &presetName, float width, bool *fixZero=nullptr, float speed=1.0f, float min=std::numeric_limits< float >::lowest(), float max=std::numeric_limits< float >::max())
MRVIEWER_API void PlotCustomHistogram(const char *str_id, std::function< float(int idx)> values_getter, std::function< void(int idx)> tooltip, std::function< void(int idx)> on_click, int values_count, int values_offset=0, float scale_min=FLT_MAX, float scale_max=FLT_MAX, ImVec2 frame_size=ImVec2(0, 0), int selectedBarId=-1, int hoveredBarId=-1, const std::vector< HistogramGridLine > &gridIndexes={}, const std::vector< HistogramGridLine > &gridValues={})
MRVIEWER_API bool Link(const char *label, uint32_t color=MR::Color(60, 120, 255).getUInt32())
Draw text as link, calls callback on click.
MRVIEWER_API bool BeginSavedWindowPos(const std::string &name, bool *open, const SavedWindowPosParams ¶ms)
MRVIEWER_API std::pair< ImVec2, bool > LoadSavedWindowPos(const char *label, ImGuiWindow *window, float width, const ImVec2 *position=nullptr)
MRVIEWER_API void Spinner(float radius)
draw spinner in given place, radius with respect to scaling
MRVIEWER_API bool InputIntBitSet(const char *label, int *v, const MR::BitSet &bs, int step=1, int step_fast=100, ImGuiInputTextFlags flags=0)
same as ImGui::InputInt
MRVIEWER_API bool ModalBigTitle(const char *title)
draw big title with close cross (i.e. for settings modal popup )
bool Combo(const char *label, int *idx, const std::vector< std::string > &values)
Definition ImGuiHelpers.h:41
float getLuminance(const ImVec4 &col)
A crude conversion to grayscale. Good enough for our purposes.
Definition ImGuiHelpers.h:343
MRVIEWER_API bool DragIntValid(const char *label, int *value, float speed=1, int min=std::numeric_limits< int >::lowest(), int max=std::numeric_limits< int >::max(), const char *format="%d")
MRVIEWER_API MultiDragRes DragFloatValid2(const char *label, float v[2], float v_speed=1.0f, float min=std::numeric_limits< float >::lowest(), float max=std::numeric_limits< float >::max(), const char *format="%.3f", ImGuiSliderFlags flags=0, const char *(*tooltips)[2]=nullptr)
Definition MRCameraOrientationPlugin.h:8
Structure that contains parameters for State plugin window with custom style.
Definition ImGuiHelpers.h:173
std::function< void()> helpBtnFn
reaction on press "Help" button
Definition ImGuiHelpers.h:197
float width
window width (should be already scaled with UI::scale())
Definition ImGuiHelpers.h:181
float height
window height, usually calculated internally (if value is zero)
Definition ImGuiHelpers.h:183
std::function< void()> customHeaderFn
draw custom header items immediately after the caption
Definition ImGuiHelpers.h:195
ImGuiWindowFlags flags
window flags, ImGuiWindowFlags_NoScrollbar and ImGuiWindow_NoScrollingWithMouse are forced inside Beg...
Definition ImGuiHelpers.h:191
bool allowScrollbar
If false, will never show the scrollbar.
Definition ImGuiHelpers.h:185
ImVec2 * position
start Position
Definition ImGuiHelpers.h:187
bool closeWithEscape
if true esc button closes the plugin
Definition ImGuiHelpers.h:199
ImVec2 * changedSize
outside owned parameter for windows with resize option
Definition ImGuiHelpers.h:193
ImVec2 pivot
the position of the starting point of the window
Definition ImGuiHelpers.h:189
bool * collapsed
Definition ImGuiHelpers.h:179
helper structure for PlotCustomHistogram describing background grid line and label
Definition ImGuiHelpers.h:146
std::string tooltip
label tooltip
Definition ImGuiHelpers.h:152
std::string label
label text
Definition ImGuiHelpers.h:150
float value
value on the corresponding axis where the line and label are located
Definition ImGuiHelpers.h:148
Definition ImGuiHelpers.h:84
bool itemDeactivatedAfterEdit
Definition ImGuiHelpers.h:86
bool valueChanged
Definition ImGuiHelpers.h:85
Parameters drawing classic ImGui::Begin with loading / saving window position.
Definition ImGuiHelpers.h:232
const ImVec2 * pos
(optional) preliminary window position
Definition ImGuiHelpers.h:236
ImVec2 size
window size
Definition ImGuiHelpers.h:234
ImGuiWindowFlags flags
Definition ImGuiHelpers.h:237
Definition MRMesh/MRColor.h:9