libobs,UI,docs: Add info as text property sub-type in the property API

master
tytan652 2022-01-13 11:44:41 +01:00 committed by Matt Gajownik
parent cd900d7091
commit bf985946a4
4 changed files with 128 additions and 0 deletions

View File

@ -310,6 +310,50 @@ QWidget *OBSPropertiesView::AddText(obs_property_t *prop, QFormLayout *layout,
connect(edit, SIGNAL(textEdited(const QString &)), info,
SLOT(ControlChanged()));
return nullptr;
} else if (type == OBS_TEXT_INFO) {
QString desc = QT_UTF8(obs_property_description(prop));
const char *long_desc = obs_property_long_description(prop);
obs_text_info_type info_type =
obs_property_text_info_type(prop);
QLabel *info_label = new QLabel(QT_UTF8(val));
if (info_label->text().isEmpty() && long_desc == NULL) {
label = nullptr;
info_label->setText(desc);
} else
label = new QLabel(desc);
if (long_desc != NULL && !info_label->text().isEmpty()) {
QString file = !App()->IsThemeDark()
? ":/res/images/help.svg"
: ":/res/images/help_light.svg";
QString lStr = "<html>%1 <img src='%2' style=' \
vertical-align: bottom; ' /></html>";
info_label->setText(lStr.arg(info_label->text(), file));
info_label->setToolTip(QT_UTF8(long_desc));
} else if (long_desc != NULL) {
info_label->setText(QT_UTF8(long_desc));
}
info_label->setOpenExternalLinks(true);
info_label->setWordWrap(obs_property_text_info_word_wrap(prop));
if (info_type == OBS_TEXT_INFO_WARNING)
info_label->setObjectName("warningLabel");
else if (info_type == OBS_TEXT_INFO_ERROR)
info_label->setObjectName("errorLabel");
if (label)
label->setObjectName(info_label->objectName());
WidgetInfo *info = new WidgetInfo(this, prop, info_label);
children.emplace_back(info);
layout->addRow(label, info_label);
return nullptr;
}
QLineEdit *edit = new QLineEdit();

View File

@ -144,9 +144,17 @@ Property Object Functions
- **OBS_TEXT_DEFAULT** - Single line of text
- **OBS_TEXT_PASSWORD** - Single line of text (passworded)
- **OBS_TEXT_MULTILINE** - Multi-line text
- **OBS_TEXT_INFO** - Read-only informative text, behaves differently
depending on wether description, string value and long description
are set
:return: The property
Important Related Functions:
- :c:func:`obs_property_text_set_info_type`
- :c:func:`obs_property_text_set_info_word_wrap`
---------------------
.. function:: obs_property_t *obs_properties_add_path(obs_properties_t *props, const char *name, const char *description, enum obs_path_type type, const char *filter, const char *default_path)
@ -437,6 +445,20 @@ Property Enumeration Functions
---------------------
.. function:: enum obs_text_info_type obs_property_text_info_type(obs_property_t *p)
:return: One of the following values:
- OBS_TEXT_INFO_NORMAL
- OBS_TEXT_INFO_WARNING
- OBS_TEXT_INFO_ERROR
---------------------
.. function:: bool obs_property_text_info_word_wrap(obs_property_t *p)
---------------------
.. function:: enum obs_path_type obs_property_path_type(obs_property_t *p)
---------------------
@ -603,6 +625,20 @@ Property Modification Functions
---------------------
.. function:: void obs_property_text_set_info_type(obs_property_t *p, enum obs_text_info_type type)
:param type: Can be one of the following values:
- **OBS_TEXT_INFO_NORMAL** - To show a basic message
- **OBS_TEXT_INFO_WARNING** - To show a warning
- **OBS_TEXT_INFO_ERROR** - To show an error
---------------------
.. function:: void obs_property_text_set_info_word_wrap(obs_property_t *p, bool word_wrap)
---------------------
.. function:: void obs_property_list_clear(obs_property_t *p)
---------------------

View File

@ -56,6 +56,8 @@ struct path_data {
struct text_data {
enum obs_text_type type;
bool monospace;
enum obs_text_info_type info_type;
bool info_word_wrap;
};
struct list_data {
@ -600,6 +602,8 @@ obs_property_t *obs_properties_add_text(obs_properties_t *props,
struct obs_property *p = new_prop(props, name, desc, OBS_PROPERTY_TEXT);
struct text_data *data = get_property_data(p);
data->type = type;
data->info_type = OBS_TEXT_INFO_NORMAL;
data->info_word_wrap = true;
return p;
}
@ -1022,6 +1026,18 @@ bool obs_property_text_monospace(obs_property_t *p)
return data ? data->monospace : false;
}
enum obs_text_info_type obs_property_text_info_type(obs_property_t *p)
{
struct text_data *data = get_type_data(p, OBS_PROPERTY_TEXT);
return data ? data->info_type : OBS_TEXT_INFO_NORMAL;
}
bool obs_property_text_info_word_wrap(obs_property_t *p)
{
struct text_data *data = get_type_data(p, OBS_PROPERTY_TEXT);
return data ? data->info_word_wrap : true;
}
enum obs_path_type obs_property_path_type(obs_property_t *p)
{
struct path_data *data = get_type_data(p, OBS_PROPERTY_PATH);
@ -1104,6 +1120,25 @@ void obs_property_text_set_monospace(obs_property_t *p, bool monospace)
data->monospace = monospace;
}
void obs_property_text_set_info_type(obs_property_t *p,
enum obs_text_info_type type)
{
struct text_data *data = get_type_data(p, OBS_PROPERTY_TEXT);
if (!data)
return;
data->info_type = type;
}
void obs_property_text_set_info_word_wrap(obs_property_t *p, bool word_wrap)
{
struct text_data *data = get_type_data(p, OBS_PROPERTY_TEXT);
if (!data)
return;
data->info_word_wrap = word_wrap;
}
void obs_property_button_set_type(obs_property_t *p, enum obs_button_type type)
{
struct button_data *data = get_type_data(p, OBS_PROPERTY_BUTTON);

View File

@ -88,6 +88,13 @@ enum obs_text_type {
OBS_TEXT_DEFAULT,
OBS_TEXT_PASSWORD,
OBS_TEXT_MULTILINE,
OBS_TEXT_INFO,
};
enum obs_text_info_type {
OBS_TEXT_INFO_NORMAL,
OBS_TEXT_INFO_WARNING,
OBS_TEXT_INFO_ERROR,
};
enum obs_number_type {
@ -324,6 +331,8 @@ EXPORT enum obs_number_type obs_property_float_type(obs_property_t *p);
EXPORT const char *obs_property_float_suffix(obs_property_t *p);
EXPORT enum obs_text_type obs_property_text_type(obs_property_t *p);
EXPORT bool obs_property_text_monospace(obs_property_t *p);
EXPORT enum obs_text_info_type obs_property_text_info_type(obs_property_t *p);
EXPORT bool obs_property_text_info_word_wrap(obs_property_t *p);
EXPORT enum obs_path_type obs_property_path_type(obs_property_t *p);
EXPORT const char *obs_property_path_filter(obs_property_t *p);
EXPORT const char *obs_property_path_default_path(obs_property_t *p);
@ -338,6 +347,10 @@ EXPORT void obs_property_int_set_suffix(obs_property_t *p, const char *suffix);
EXPORT void obs_property_float_set_suffix(obs_property_t *p,
const char *suffix);
EXPORT void obs_property_text_set_monospace(obs_property_t *p, bool monospace);
EXPORT void obs_property_text_set_info_type(obs_property_t *p,
enum obs_text_info_type type);
EXPORT void obs_property_text_set_info_word_wrap(obs_property_t *p,
bool word_wrap);
EXPORT void obs_property_button_set_type(obs_property_t *p,
enum obs_button_type type);