You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.9 KiB

// License: Apache 2.0. See LICENSE file in root directory.
// Copyright(c) 2022 Intel Corporation. All Rights Reserved.
#pragma once
#include <librealsense2/rs.hpp>
#include <rsutils/time/stopwatch.h>
namespace rs2
{
struct notifications_model;
class subdevice_model;
class option_model
{
public:
bool draw( std::string& error_message, notifications_model& model, bool new_line = true, bool use_option_name = true );
void update_supported( std::string& error_message );
void update_read_only_status( std::string& error_message );
void update_all_fields( std::string& error_message, notifications_model& model );
bool set_option( rs2_option opt,
float value,
std::string& error_message,
std::chrono::steady_clock::duration ignore_period = std::chrono::seconds( 0 ) );
bool draw_option( bool update_read_only_options, bool is_streaming,
std::string& error_message, notifications_model& model );
std::vector< const char * > get_combo_labels( int * p_selected = nullptr ) const;
rs2_option opt;
option_range range;
std::shared_ptr<options> endpoint;
float unset_value = 0;
bool have_unset_value = false;
rsutils::time::stopwatch last_set_stopwatch;
bool* invalidate_flag = nullptr;
bool supported = false;
bool read_only = false;
rs2::option_value value;
std::string label;
std::string id;
subdevice_model* dev;
std::function<bool( option_model&, std::string&, notifications_model& )> custom_draw_method = nullptr;
bool edit_mode = false;
std::string edit_value;
private:
bool is_all_integers() const;
bool is_enum() const;
bool is_checkbox() const;
bool draw_checkbox( notifications_model& model, std::string& error_message, const char* description );
bool draw_combobox( notifications_model& model, std::string& error_message, const char* description, bool new_line, bool use_option_name );
bool draw_slider( notifications_model& model, std::string& error_message, const char* description, bool use_cm_units );
bool slider_selected( rs2_option opt,
float value,
std::string& error_message,
notifications_model& model );
bool slider_unselected( rs2_option opt,
float value,
std::string& error_message,
notifications_model& model );
std::string adjust_description( const std::string& str_in, const std::string& to_be_replaced, const std::string& to_replace );
};
option_model create_option_model(option_value const & opt,
const std::string& opt_base_label,
subdevice_model* model,
std::shared_ptr<options> options,
bool* options_invalidated,
std::string& error_message);
}